如何将光标定位在遮罩文本框的文本末尾

本文关键字:文本 光标 定位 | 更新日期: 2023-09-27 18:08:37

我使用的是带有电话号码掩码的遮罩文本框,如果单击该控件,光标的位置将被设置在单击鼠标的任何位置。我想重写光标的默认位置,以便:

  1. 如果没有输入任何文本,则光标位于文本框的起始位置

  2. 如果已经输入了文本,并且单击了控件,则将光标放置在最后输入的数字之后。

有办法做到这一点吗?

编辑

有些人建议使用以下代码:

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,但额外考虑可能出现在开头的任何不可编辑的文本-简而言之,这会将光标移动到第一个可用的可编辑位置。