Получить текст из текстового поля в позиции курсора .net - PullRequest
3 голосов
/ 11 декабря 2011

Мне нужно получить текст из текстового поля в winforms, мне нужно получить текст, между которым находится курсор, например,

Hello или posit | ion или look

Это должно вернуть слово position (обратите внимание, здесь я использовал трубу в качестве курсора)

Вы знаете какую-либо технику, которую я могу использовать для этого

Ответы [ 3 ]

3 голосов
/ 12 декабря 2011

Я проверил это очень быстро, и похоже, что он работает последовательно

Private Function GetCurrentWord(ByRef txtbox As TextBox) As String
    Dim CurrentPos As Integer = txtbox.SelectionStart
    Dim StartPos As Integer = CurrentPos
    Dim EndPos As Integer = txtbox.Text.ToString.IndexOf(" ", StartPos)

    If EndPos < 0 Then
        EndPos = txtbox.Text.Length
    End If

    If StartPos = txtbox.Text.Length Then
        Return ""
    End If

    StartPos = txtbox.Text.LastIndexOf(" ", CurrentPos)
    If StartPos < 0 Then
        StartPos = 0
    End If

    Return txtbox.Text.Substring(StartPos, EndPos - StartPos).Trim
End Function
3 голосов
/ 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)

спасибо всем

2 голосов
/ 12 декабря 2011

Попробуйте что-то вроде этого:

private void textBox1_MouseHover(object sender, EventArgs e)
{
    Point toScreen = textBox1.PointToClient(new Point(Control.MousePosition.X + textBox1.Location.X, Control.MousePosition.Y + textBox1.Location.Y));

    textBox1.SelectionStart = toScreen.X - textBox1.Location.X;
    textBox1.SelectionLength = 5; //some random number

    MessageBox.Show(textBox1.SelectedText + Environment.NewLine +  textBox1.SelectionStart.ToString());
}

Это работает как-то для меня, но также зависит от того, является ли ваше текстовое поле добавленным элементом управления для самой формы. если он находится внутри панели или что-то еще, код должен быть изменен.

Редактировать Кажется, я неправильно понял ваш вопрос, хотя вам нужно выбрать текст, когда на него наведет курсор мыши! Сожалею! Я полагаю, что вы можете выполнить эту задачу только с помощью RichTextBox, где вы можете получить позицию каретки в ней!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...