C # | Как выбрать слово в TextBox по расположению курсора? - PullRequest
0 голосов
/ 18 сентября 2009

В форме Windows, используя C #, как выбрать (например, выделить текст, делая его доступным для свойства .SelectedText) слово, основанное на расположении курсора?

Вот что я пытаюсь сделать. У меня есть текстовое поле, в котором пользователи могут выбрать слово, выделив его. Затем они могут выполнять различные действия со словом, но я хочу упростить его.

Я хочу сделать так, чтобы они могли просто поместить курсор в слово, и приложение выберет слово, внутри которого находится курсор.

Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 18 сентября 2009

Вы можете использовать SelectionStart и SelectionLength, но вам, вероятно, нужно найти следующий пробел из позиции курсора, затем обратить вспять содержимое текстового поля и найти следующий «пробел» из позиции «измененного курсора», затем используйте два метода выше.

Это также будет работать

int cursorPosition = textBox1.SelectionStart;
int nextSpace = textBox1.Text.IndexOf(' ', cursorPosition);
int selectionStart = 0;
string trimmedString = string.Empty;
// Strip everything after the next space...
if (nextSpace != -1)
{
    trimmedString = textBox1.Text.Substring(0, nextSpace);
}
else
{
    trimmedString = textBox1.Text;
}


if (trimmedString.LastIndexOf(' ') != -1)
{
    selectionStart = 1 + trimmedString.LastIndexOf(' ');
    trimmedString = trimmedString.Substring(1 + trimmedString.LastIndexOf(' '));
}

textBox1.SelectionStart = selectionStart;
textBox1.SelectionLength = trimmedString.Length;
2 голосов
/ 18 сентября 2009

Используйте свойства SelectionStart и SelectionLength.
Google

1 голос
/ 15 июня 2016
    //this is our article
string article = " " + richTextBox1.Text.ToLower() + " "; 
//we search the word from textbox1
                    int middle = article.IndexOf(textBox1.Text);
                    int headOfWord = article.LastIndexOf(" ", middle);
                    int tailOfWord = article.IndexOf(" ", middle);
    //we have found the head and tail of the word
                    textBox2.Text = article.Substring(headOfWord, tailOfWord - headOfWord);
                    richTextBox1.Focus();
                    richTextBox1.Select(headOfWord, tailOfWord - headOfWord - 1);
0 голосов
/ 12 декабря 2011

На самом деле у меня есть более простой подход

Dim intCursor As Integer = txtInput.SelectionStart
Dim intStart As Int32 = CInt(IIf(intCursor - 1 < 0, 0, intCursor - 1))
Dim intStop As Int32 = intCursor
intStop = txtInput.Text.IndexOf(" ", intCursor)
intStart = txtInput.Text.LastIndexOf(" ", intCursor)
If intStop < 0 Then
 intStop = txtInput.Text.Length
End If
If intStart < 0 Then
  intStart = 0
End If
debug.print( txtInput.Text.Substring(intStart, intStop - intStart).Trim)
0 голосов
/ 18 сентября 2009

Надеюсь, это поможет:

            if (string.IsNullOrEmpty(textBox1.Text))
        {
            return;
        }

        int cursorPos = textBox1.SelectionStart;
        int firstPos = 0;
        int lastPost = 0;

        // If the current cursor is at the end of the string, try to go backwards
        string currentChar = cursorPos == textBox1.Text.Length ? textBox1.Text.Substring(cursorPos - 1, 1) : textBox1.Text.Substring(cursorPos, 1);
        if (currentChar == " ") 
        {
            cursorPos--;
        }

        // Iterate to the first position where a space is
        for (int i = cursorPos; i > 0; i--)
        {
            // Get the current character
            currentChar = i == textBox1.Text.Length ? textBox1.Text.Substring(i - 1, 1) : textBox1.Text.Substring(i, 1);
            if (currentChar == " ")
            {
                firstPos = i+1;
                break;
            }
        }

        for (int i = cursorPos; i <= textBox1.Text.Length; i++)
        {
            if (i == textBox1.Text.Length)
            {
                lastPost = i;
            }
            else
            {
                // Get the current character
                currentChar = textBox1.Text.Substring(i, 1);
                if (currentChar == " ")
                {
                    lastPost = i;
                    break;
                }
            }
        }

        textBox1.SelectionStart = firstPos;
        textBox1.SelectionLength = lastPost - firstPos;
        textBox1.Focus();

Для этого примера вам нужно текстовое поле, textBox1 и кнопка, куда идет этот код. Дайте мне знать, если вам нужна помощь.

РЕДАКТИРОВАТЬ: немного изменил код и протестировал все сценарии. Надеюсь, это поможет!

...