加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于maskedtextbox输入的C#Hex Mask

发布时间:2020-12-16 03:40:20 所属栏目:百科 来源:网络整理
导读:我正在尝试为文本框设置十六进制掩码.这样只能输入有效的十六进制数. (和’,’和’ENTER’) 它几乎可以工作.到目前为止它只允许来自a-f和数字0-9的小写字母,但我仍然可以输入大写字母GHIJKLM. (首先,当程序启动时,它似乎接受了一个char ex k,但是在它之后不
我正在尝试为文本框设置十六进制掩码.这样只能输入有效的十六进制数. (和’,’和’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事件.您还可以使用“属性”窗口在设计时绑定事件

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读