3

WinFormsのテキストボックスからテキストを取得する必要があります。カーソルが間にあるテキストを取得する必要があります。

こんにちはまたは位置|イオンまたは見て

これは単語を返すはずですposition(ここで私はカーソルとしてパイプを使用したことに注意してください)

私がこれに使用できるテクニックを知っていますか

4

3 に答える 3

3

私はこれを本当に素早くテストしました、そしてそれは一貫して働くようです

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
于 2011-12-11T23:05:58.700 に答える
3

助けようとしたすべての人に感謝します、

ループすることなく、より良い、よりシンプルなアプローチを手に入れました

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)

皆さんありがとう

于 2011-12-12T08:33:24.243 に答える
2

次のようなものを試してください。

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私はあなたがその中でカレットの位置を得ることができる場所を使用してのみこのタスクを行うことができると信じています!

于 2011-12-11T22:51:03.637 に答える