none
Cursore richTextBox RRS feed

  • Domanda

  • Salve a tutti.

    È possibile cambiare il cursore del mouse quando incontro un link in un richTextBox?
    È possibile inoltre creare un link in un richTextBox senza che sia necessariamente un URL?

    venerdì 3 dicembre 2010 10:26

Risposte

  • Ciao Simone,

    Prima, la proprietà : 

    this.richTextBox1.DetectUrls = false;

    altrimenti avrai sempre la manina sui collegamenti. Non ho trovato come sovrascrivere questo L

    Per ricavare il testo corrente implementa questa funzione:

    public string GetWordUnderMouse(ref System.Windows.Forms.RichTextBox Rtf, int X, int Y)

    {

        string functionReturnValue = null;

     

        System.Drawing.Point POINT = new System.Drawing.Point();

        int Pos = 0;

        int i = 0;

        int lStart = 0;

        int lEnd = 0;

        int lLen = 0;

        string sTxt = null;

        string sChr = null;

        POINT.X = X;

        POINT.Y = Y;

       

        functionReturnValue = String.Empty;

       

        lLen = Rtf.Text.Length-1;

        sTxt = Rtf.Text;

        Pos = Rtf.GetCharIndexFromPosition(POINT);

        if (Pos > 0)

        {

            for (i = Pos; i >= 1; i += -1)

            {

                sChr = sTxt.Substring(i, 1);

                if (sChr == " " | sChr == "\r\n" | i == 1)

                {

                    if (sChr == "\r\n") //toglie riga nuova

                    {

                        lStart = (i + 2);

                    }

                    else

                    {

                        lStart = i;

                    }

                    break;

                }

            }

           

            for (i = Pos; i <= lLen; i++)

            {

                if (sTxt.Substring(i, 1) == " " | i == lLen | sTxt.Substring(i, 1) == "\r\n")

                {

                    lEnd = i + 1;

                    break;

                }

            }

            if (lEnd >= lStart)

            {

                functionReturnValue = sTxt.Substring(lStart, lEnd - lStart).Trim();

            }

        }

        return functionReturnValue;

    }

     

    Quindi chiamala sul evento MouseMouve e cambia l’icona che ti piace in base al contenuto del testo

     

    private void richTextBox1_MouseMove(object sender, MouseEventArgs e)

    {

        string word = this.GetWordUnderMouse(ref richTextBox1, e.X, e.Y);

        textBox1.Text = word;

        string[] strlist = {"www.", "http://", "file://", "mailto://", "ftp://", "https://", "gopher://", "nntp://", "prospero://", "telnet://", "news://", "wais://", "outlook://", "\\" };

        int count = 0;

        foreach (string str in strlist) if (word.Contains(str))   count++;

        if (count > 0)

        {

            Cursor myCur = new Cursor(@"C:\test\BULLSEYE.cur");//qui metti la tua  

            richTextBox1.Cursor = myCur; //oppure scegline un'altra da Cursors....

        }

        else

        {

            richTextBox1.Cursor = Cursors.Default;

        }

    }

     

    Ho preso spunto da qui e da qui.

    Spero ti aiuta, altrimenti chiedi pure.

    Saluti, Daniel.


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.
    • Contrassegnato come risposta Simone_Francio venerdì 10 dicembre 2010 10:48
    lunedì 6 dicembre 2010 14:56

Tutte le risposte

  • Alla seconda domanda ho trovato una risposta: http://www.codeproject.com/KB/edit/RichTextBoxLinks.aspx
    venerdì 3 dicembre 2010 14:12
  • Sarebbe addirittura interessante poter creare un evento che intercetti il mouse che passa su un link della richTextBox.

    In questo modo poi potrei fare tutto quello che voglio compreso cambiare il cursore.

    venerdì 3 dicembre 2010 15:40
  • Ciao Simone,

    Prima, la proprietà : 

    this.richTextBox1.DetectUrls = false;

    altrimenti avrai sempre la manina sui collegamenti. Non ho trovato come sovrascrivere questo L

    Per ricavare il testo corrente implementa questa funzione:

    public string GetWordUnderMouse(ref System.Windows.Forms.RichTextBox Rtf, int X, int Y)

    {

        string functionReturnValue = null;

     

        System.Drawing.Point POINT = new System.Drawing.Point();

        int Pos = 0;

        int i = 0;

        int lStart = 0;

        int lEnd = 0;

        int lLen = 0;

        string sTxt = null;

        string sChr = null;

        POINT.X = X;

        POINT.Y = Y;

       

        functionReturnValue = String.Empty;

       

        lLen = Rtf.Text.Length-1;

        sTxt = Rtf.Text;

        Pos = Rtf.GetCharIndexFromPosition(POINT);

        if (Pos > 0)

        {

            for (i = Pos; i >= 1; i += -1)

            {

                sChr = sTxt.Substring(i, 1);

                if (sChr == " " | sChr == "\r\n" | i == 1)

                {

                    if (sChr == "\r\n") //toglie riga nuova

                    {

                        lStart = (i + 2);

                    }

                    else

                    {

                        lStart = i;

                    }

                    break;

                }

            }

           

            for (i = Pos; i <= lLen; i++)

            {

                if (sTxt.Substring(i, 1) == " " | i == lLen | sTxt.Substring(i, 1) == "\r\n")

                {

                    lEnd = i + 1;

                    break;

                }

            }

            if (lEnd >= lStart)

            {

                functionReturnValue = sTxt.Substring(lStart, lEnd - lStart).Trim();

            }

        }

        return functionReturnValue;

    }

     

    Quindi chiamala sul evento MouseMouve e cambia l’icona che ti piace in base al contenuto del testo

     

    private void richTextBox1_MouseMove(object sender, MouseEventArgs e)

    {

        string word = this.GetWordUnderMouse(ref richTextBox1, e.X, e.Y);

        textBox1.Text = word;

        string[] strlist = {"www.", "http://", "file://", "mailto://", "ftp://", "https://", "gopher://", "nntp://", "prospero://", "telnet://", "news://", "wais://", "outlook://", "\\" };

        int count = 0;

        foreach (string str in strlist) if (word.Contains(str))   count++;

        if (count > 0)

        {

            Cursor myCur = new Cursor(@"C:\test\BULLSEYE.cur");//qui metti la tua  

            richTextBox1.Cursor = myCur; //oppure scegline un'altra da Cursors....

        }

        else

        {

            richTextBox1.Cursor = Cursors.Default;

        }

    }

     

    Ho preso spunto da qui e da qui.

    Spero ti aiuta, altrimenti chiedi pure.

    Saluti, Daniel.


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.
    • Contrassegnato come risposta Simone_Francio venerdì 10 dicembre 2010 10:48
    lunedì 6 dicembre 2010 14:56