当用户按下SuppressKeyPress = true
中的ENTER / RETURN键时,我正在设置MaskedTextBox
,以防止通常发出的恼人的哔哔声。这很好用,但当我清除表单时,MaskedTextBox
不再按预期运行。输入的第一个字符是一个幻象字符,在输入第二个字符后消失。
示例:
__.___
Set text = "0"
0_.___
User enters text
09.999
User presses ENTER
User presses Save & Next (this clears the form)
Reset text = "0"
0_.___
User enters first 9
09_.___
User enters second 9
0_.9__
如果用户TABS离开MaskedTextBox
而不是按ENTER,这样可以正常工作(文本输入正确,没有任何奇怪的移位。)我能找到的唯一区别是我正在使用{{1并且非公开成员中的flagState是不同的(当我不SuppressKeyPress
时为2052,而当我SuppressKeyPress
时为2048。)
有没有办法可以在不违反SuppressKeyPress
的情况下阻止BEEP,或者在MaskedTextBox
之后修复MaskedTextBox
的方法(我已经尝试了大多数方法,而不是所有方法SuppressKeyPress
本身:MaskedTextBox
,refreshText
等等......)
这是MaskedTextBox定义和KeyDown方法:
refresh
//
// aTextBox
//
this.aTextBox.Location = new System.Drawing.Point(130, 65);
this.aTextBox.Mask = "##.###";
this.aTextBox.Name = "aTextBox";
this.aTextBox.Size = new System.Drawing.Size(50, 20);
this.aTextBox.TabIndex = 3;
this.aTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.general_KeyDown);
this.aTextBox.Leave += new System.EventHandler(this.validate);
看起来像这样:
general_KeyDown
答案 0 :(得分:1)
我无法重复,但我肯定会在参考资料中看到它。 MaskTextBox在查看时也会查找Keys.Enter和sets以及内部标志,这是一个影响后续按键操作的键处理的标志。你的代码可能会搞砸了。
通过覆盖OnKeyDown确保控件根本看不到击键。这需要继承你自己的控件,如下所示:
using System;
using System.Windows.Forms;
class MyMaskTextBox : MaskedTextBox {
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyData == Keys.Enter) {
e.Handled = e.SuppressKeyPress = true;
this.Parent.GetNextControl(this, true).Select();
return;
}
base.OnKeyDown(e);
}
}
将代码粘贴到新类中并进行编译。从工具箱顶部删除新控件,替换旧控件。