我正在尝试为文本框设置十六进制掩码.这样只能输入有效的十六进制数.(和','和'ENTER')
它几乎可以工作.到目前为止它只允许来自af和0-9的小写字母,但我仍然可以输入大写字母GHIJKLM.(首先,当程序启动时,它似乎接受了一个char ex k,但是在它之后不会显示k之后,直到下次启动程序.这很奇怪.)
这是代码的一部分:
private void EnterKey(Object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// if keychar == 13 is the same as check for if <ENTER> was pressed
if (e.KeyChar == (char)13)
{
// is <ENTER> pressed, send button_click
button1_Click(sender, e);
}
{
// this will only allow valid hex values [0-9][a-f][A-F] to be entered. See ASCII table
char c = e.KeyChar;
if (c != '\b' && !((c <= 0x66 && c >= 61) || (c <= 0x46 && c >= 0x41) || (c >= 0x30 && c <= 0x39) || (c == 0x2c)))
{
e.Handled = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我绑定事件的方式:
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyDown);
}
Run Code Online (Sandbox Code Playgroud)
难道你们这些聪明人,看看我做错了什么?
这是我的第一个小程序,所以对我很轻松:o)
这个:
c <= 0x66 && c >= 61
Run Code Online (Sandbox Code Playgroud)
应该:
c <= 0x66 && c >= 0x61 //hex literal
Run Code Online (Sandbox Code Playgroud)
请注意,通过查找十六进制代码会浪费宝贵的时间,您可以轻松地比较字符:
if ((c >= 'a') && (c <= 'f'))
Run Code Online (Sandbox Code Playgroud)
至于第一个字符:你不应该绑定KeyPress在TextChanged事件-这是为时已晚!这是事件的顺序:
你想要做的是从一开始就绑定事件.最好的地方是Form_Load活动.
您还可以使用"属性"窗口在设计时绑定事件