从光标位置的文本框中获取文本.net
Posted
技术标签:
【中文标题】从光标位置的文本框中获取文本.net【英文标题】:Get text from textbox in cursor position .net 【发布时间】:2012-01-17 22:31:13 【问题描述】:我需要从 winforms 的文本框中获取文本,我需要获取光标所在的文本,例如
你好或位置|ion或看
这应该返回单词position
(注意这里我使用管道作为光标)
你知道我可以使用什么技术吗
【问题讨论】:
使用 SelectedText 属性。 谢谢,我重新编辑了我的问题,我实际上得到了第二部分 【参考方案1】:试试这样的:
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
来完成此任务,您可以在其中获取插入符号的位置!
【讨论】:
你错了,看看我下面的方法和你上面的方法【参考方案2】:我对此进行了快速测试,似乎它始终如一地工作
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
【讨论】:
@SpectralGhost 看看我下面的方法,虽然我在看到你的代码之前解决了这个问题【参考方案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)
谢谢大家
【讨论】:
+1 我喜欢你对 LastIndexOf 的使用,所以我将答案更新为不循环。以上是关于从光标位置的文本框中获取文本.net的主要内容,如果未能解决你的问题,请参考以下文章