我希望能够覆盖在插入的文本框中定位插入符的默认行为.
默认情况下将插入符号放在单击鼠标的位置,屏蔽文本框已包含由于掩码而导致的字符.
我知道你可以隐藏这篇文章中提到的插入符号,当控件获得焦点时,是否有类似于在文本框开头放置插入符号的东西.
这应该做的伎俩:
private void maskedTextBox1_Enter(object sender, EventArgs e) { this.BeginInvoke((MethodInvoker)delegate() { maskedTextBox1.Select(0, 0); }); }
要改进Abbas的工作解决方案,请尝试以下方法:
private void ueTxtAny_Enter(object sender, EventArgs e) { //This method will prevent the cursor from being positioned in the middle //of a textbox when the user clicks in it. MaskedTextBox textBox = sender as MaskedTextBox; if (textBox != null) { this.BeginInvoke((MethodInvoker)delegate() { int pos = textBox.SelectionStart; if (pos > textBox.Text.Length) pos = textBox.Text.Length; textBox.Select(pos, 0); }); } }
此事件处理程序可以与多个框重复使用,并且不会消除用户将光标定位在输入数据中间的能力(即,当框不为空时,不会将光标强制置于零位置).
我发现这更接近于模仿标准文本框.只剩下毛刺(我可以看到)是在'Enter'事件之后,如果xe按住鼠标并拖动到最后,用户仍然可以选择其余的(空)掩码提示.
这是对MaskedTextBoxes默认行为的重大改进.谢谢!
我对Ishmaeel的出色解决方案做了一些改动.我更喜欢只在需要移动光标时才调用BeginInvoke.我还从各种事件处理程序调用该方法,因此输入参数是活动的MaskedTextBox.
private void maskedTextBoxGPS_Click( object sender, EventArgs e ) { PositionCursorInMaskedTextBox( maskedTextBoxGPS ); } private void PositionCursorInMaskedTextBox( MaskedTextBox mtb ) { if (mtb == null) return; int pos = mtb.SelectionStart; if (pos > mtb.Text.Length) this.BeginInvoke( (MethodInvoker)delegate() { mtb.Select( mtb.Text.Length, 0 ); }); }