用于maskedtextbox输入的C#Hex Mask

前端之家收集整理的这篇文章主要介绍了用于maskedtextbox输入的C#Hex Mask前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为文本框设置十六进制掩码.这样只能输入有效的十六进制数. (和’,’和’ENTER’)

它几乎可以工作.到目前为止它只允许来自a-f和数字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;
        }
    }
}

这就是我绑定事件的方式:

private void textBox1_TextChanged(object sender,EventArgs e)
{
    this.textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyDown);
}

难道你们这些聪明人,看看我做错了什么?

这是我的第一个小程序,所以对我很轻松:o)

解决方法

这个:
c <= 0x66 && c >= 61

应该:

c <= 0x66 && c >= 0x61 //hex literal

请注意,通过查找十六进制代码会浪费宝贵的时间,您可以轻松地比较字符:

if ((c >= 'a') && (c <= 'f'))

至于第一个字符:你不应该在TextChanged事件中绑定KeyPress – 为时已晚!这是事件的顺序:

>表格载荷
> ……
>用户单击一个键.
>触发TextChanged,更改文本并绑定事件.
>用户单击一个键.
> KeyPress被触发.

你想要做的是从一开始就绑定事件.最好的地方是Form_Load事件.您还可以使用“属性”窗口在设计时绑定事件

原文链接:https://www.f2er.com/c/110690.html

猜你在找的C&C++相关文章