Laden...

In RichTextBox bei jedem Doppelklick ein Wort mehr selektieren

Erstellt von Lukas91 vor 12 Jahren Letzter Beitrag vor 12 Jahren 934 Views
L
Lukas91 Themenstarter:in
11 Beiträge seit 2010
vor 12 Jahren
In RichTextBox bei jedem Doppelklick ein Wort mehr selektieren

Hallo zusammen!

Ich habe bei mir eine RichTextBox und habe das MouseEvent MoseDoubleClick genommen. Ich habe das versucht, Bsp:
"select word by word"

Wenn ich einen DoubleClick auf das Wort "select" mache soll dieses markiert sein mache ich dann noch ein double click auf das Wort, dann soll "select word" markiert sein und so weiter. Problem ist das bei mir immer 2 Wörter auf einmal selektiert werden und auch nur 2 keine 3 oder 4.
Hier ist der Code von der MausEvent DoubleClick:

int start = richTextBox1.SelectionStart;
            int laenge = richTextBox1.SelectionLength;
            int laenge2 = 0;

            for (int i = start + laenge; i < richTextBox1.Text.Length; i++) //fange hier bei dem i-Wert bei start+Anzahl der Zeichen an
            {
                if (richTextBox1.Text[i] == ' ' || richTextBox1.Text[i] == '\n')// schaue ob das Zeichen in der RichTextBox
                    break;//an der Stelle i ein SPACE oder ein Zeilenumruch ist wenn ja break
                else
                    laenge2++;//solange mache laenge2 um eins höher
            }

            richTextBox1.SelectionStart = start;//änder sicht nichts
            richTextBox1.SelectionLength = laenge + laenge2;//hier adiere ich die Laenge der Zeichen mit dem neuen zusammen und makiere es.

Habe da schon über anderen Wegen ans Ergebnis zu kommen. leider nicht geschafft.

Danke für eure Hilfe im Voraus.

Gruß,
Lukas

G
28 Beiträge seit 2010
vor 12 Jahren

Hallo Lukas,

die Lösung sollte ungefähr so aussehen:

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int doubleclicks = 0, start, len;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int cursorPosition = textBox1.SelectionStart;
            int nextSpace = textBox1.Text.IndexOf(" ", cursorPosition); // das nächste leerzeichen nach dem cursor
            for (int i = 0; i < doubleclicks; i++)
            {
                nextSpace = textBox1.Text.IndexOf(" ", nextSpace + 1); // wenn mehr als 1 wort ausgewählt wird finde das letzte leerzeichen
            }

            int selectionStart = 0;
            string trimmedString = "";

            if (nextSpace != -1)
                trimmedString = textBox1.Text.Substring(0, nextSpace); // kopiere den teil bis zum space für weitere verarbeitung
            else
                trimmedString = textBox1.Text;

            if (trimmedString.LastIndexOf(" ") != -1)
            {
                selectionStart = 1 + trimmedString.LastIndexOf(" "); // ermittle den Anfangspunkt
                trimmedString = trimmedString.Substring(1 + trimmedString.LastIndexOf(" ")); // -> das zu selectierende wort
            }

            if (doubleclicks == 0)
            {
                start = selectionStart;
                len += trimmedString.Length;
            }
            else
                len += trimmedString.Length + 1; // +1, da wir bei mehr als 1 wort auch die spaces auswählen müssen

            textBox1.SelectionStart = start;
            textBox1.SelectionLength = len;
            doubleclicks++;
        }
    }
}

Hab ich übrigens abgeleitet von C # | Wie kann ich ein Wort in einem Text mit dem Cursor Location wählen? 😉
Gesucht wurde dabei bei google.de mit "c# textbox wort unter maus". also nächste mal selber mal n bisschen "googlen" und n bisschen eigenen gehirnsschmalz investieren und dann sollte das gut fruchten 😉

Mfg
Gumba