如何将光标定位在遮罩文本框的文本末尾
本文关键字:文本 光标 定位 | 更新日期: 2023-09-27 18:08:37
我使用的是带有电话号码掩码的遮罩文本框,如果单击该控件,光标的位置将被设置在单击鼠标的任何位置。我想重写光标的默认位置,以便:
-
如果没有输入任何文本,则光标位于文本框的起始位置
-
如果已经输入了文本,并且单击了控件,则将光标放置在最后输入的数字之后。
有办法做到这一点吗?
编辑
有些人建议使用以下代码:
PhoneNumber.SelectionStart = PhoneNumber.Text.Length;
但是这不起作用,因为掩码字面值包含在长度计数中,这会打乱光标的位置。我知道你可以设置textmaskformat属性来排除字面量,但是计数仍然不正确,因为字面量仍然被显示。
您可以使用MaskedTextProvider
类中的LastAssignedPosition
属性,作为MaskedTextBox
的属性:
maskedTextBox1.SelectionStart
= maskedTextBox1.MaskedTextProvider.LastAssignedPosition + 1;
maskedTextBox1.SelectionLength = 0;
这是一个相当古老的问题,但我今天遇到了它,而试图在我的winforms
应用程序中实现相同的。
接受的答案确实有效,但会将光标定位在位置0
,即使开头有遮罩文本:XYZ______
。
我能够通过在MaskedTextProvider
上使用FindUnassignedEditPositionFrom()
方法来解决这个问题:
private void TextBox_Click(object sender, EventArgs e)
{
int startPos = this.textBox.MaskedTextProvider.FindUnassignedEditPositionFrom(this.textBox.MaskedTextProvider.LastAssignedPosition + 1, true);
this.textBox.Select(startPos, 0);
}
这将使用与接受的答案相同的LastAssignedPosition
,但额外考虑可能出现在开头的任何不可编辑的文本-简而言之,这会将光标移动到第一个可用的可编辑位置。