【发布时间】:2024-01-20 16:01:01
【问题描述】:
这可能非常简单。
我在 WinForm 上有一个文本框,Text = "ABCDEFGH"。我需要选择“BCD”并将 I-Beam(光标、插入符号、闪烁的“|”)留在“A”和“B”之间。设置 SelectionStart = 1 和 SelectionLenght = 3 不起作用,我想不通。
【问题讨论】:
标签: c# winforms textbox cursor-position
这可能非常简单。
我在 WinForm 上有一个文本框,Text = "ABCDEFGH"。我需要选择“BCD”并将 I-Beam(光标、插入符号、闪烁的“|”)留在“A”和“B”之间。设置 SelectionStart = 1 和 SelectionLenght = 3 不起作用,我想不通。
【问题讨论】:
标签: c# winforms textbox cursor-position
您需要将SelectionLength 设置为0 为noted in the documentation。
您可以通过设置以编程方式在文本框中移动插入符号 SelectionStart 到文本框中您想要的位置 要移动到的插入符号并将 SelectionLength 属性设置为一个值 零 (0)。
如果问题是 BCD 实际上已被选中,但您希望光标在 B 之前移回我不相信您将能够做到这一点通过框架属性,因为选择文本会将光标移动到文本的末尾。如here 所述,您需要使用坐标和本机互操作。
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCaretPos(out Point lpPoint);
然后您可以致电SetCaretPos。
【讨论】:
如果将TextBox.Multiline 属性设置为True,则可以使用负选择长度来执行此操作。您需要使用Select() 重载,因为SelectionLength 不允许负值。
textBox.Select(1 + 3, -3);
【讨论】: