MaskedTextBox的聚焦和光标位置

时间:2022-11-04 21:35:56

遇到一个关于MaskedTextBox聚焦和光标居左的问题。

①. 先说说聚焦:

  起初给MaskedTextBox设置了Focus(),运行之后,并没有作用。

  然后又给Form添加了Load事件,又设置了Focus(),再一次Failure了。

  好吧,本着不达目的不吃饭的原则。又给Form添加了一个Activated事件,依旧设置Focus()。结果,不成想可以了。

这里先给出Load事件和Activated的区别

  首先Load事件只会在第一次窗口显示前发生。 它的执行顺序是在InitializeComponent之后。

  然后是Activated事件则是在代码激活或者窗体激活发生 (这段似不似没明白,简单理解就是窗体重绘Paint时会出发生。有兴趣的朋友可以debug一下,切身体验一下,我只能说根本停不下来)。 它的执行顺序实在Load之后。

  来说说Load事件为什么不起作用,这是因为Load事件执行时MaskedTextBox并没有显示在窗体上(不信的同学可以自己试一试)。

之后又试了一种方法,就是使用Select(),就不赘述了,直接上代码:

 public TestForm()
{
InitializeComponent();
mask.Select(); //MaskedTextBox控件
}

  到这里,聚焦的问题算是解决了。目前来看是两种方案: 添加Activated事件和使用Select()。

②.  再说说光标:

  说到光标很快就想到SelectionStart这个属性。

  也是很悲催的用了Enter和MouseClick都失败了。最后用了Click之后,才发现这才是真爱

  直接上代码:

 private void ClickMask(object sender, EventArgs e)
{
// 每次点击后,让光标居文本左边
mask.SelectionStart = mask.SelectionLength;
}

③. 最后来总结:

  吐槽一下,成功的路是曲折的,但是收获总是满满的。