如何将光标定位到掩码文本框中的文本末尾?

9
我正在使用带有电话号码掩码的文本框,并且如果您单击该控件,则光标位置将设置在鼠标点击的位置。 我想覆盖默认的光标定位,使其:

  1. 如果没有输入文本,则将光标定位在文本框开头。

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

有方法可以实现这个吗?

编辑

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

PhoneNumber.SelectionStart = PhoneNumber.Text.Length;

但是这种方法行不通,因为掩码字面值也包括在长度计数中,这会导致光标定位出错。我知道你可以设置textmaskformat属性来排除字面值,但是计数仍然不正确,因为字面值仍然会被显示。


2
你应该在问题中提及到你目前所遇到的问题。 - Dmitrii Dovgopolyi
2个回答

8

3
这是一个相当久远的问题,但我今天在尝试在我的 winforms 应用程序中实现它时遇到了这个问题。
虽然被接受的答案确实有效,但会将光标定位在位置 0,即使在开头有掩码文本:XYZ______
我能够通过使用 MaskedTextProviderFindUnassignedEditPositionFrom() 方法来解决这个问题。
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,但是还考虑了可能出现在开头的任何不可编辑文本——简而言之,这将把光标移到第一个可编辑位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接