用于屏蔽文本框输入的 C# 十六进制掩码

标签 c# hex mask

我正在尝试为文本框设置十六进制掩码。这样只能输入有效的十六进制数字。 (还有','和'ENTER')

它几乎可以工作。到目前为止,它只允许小写字母 a-f 和数字 0-9,但我仍然可以输入大写字母 GHIJKLM。 (起初,当程序启动时它似乎接受一个字符 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;
        }
    }
}

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

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 事件中绑定(bind) KeyPress - 为时已晚!这是事件的顺序:

  1. 表单加载
  2. ...
  3. 用户点击一个键。
  4. TextChanged 被触发,改变文本并绑定(bind)事件。
  5. 用户点击一个键。
  6. 按键触发。

您要做的是从一开始就绑定(bind)事件。最好的地方是 Form_Load 事件。
您还可以使用 Properties 窗口在设计时绑定(bind)事件

关于用于屏蔽文本框输入的 C# 十六进制掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337981/

相关文章:

c - 读入十六进制值 (C)

java - 在 Android 中反转十六进制颜色

python - 根据向量类型元素获取numpy数组的掩码

c# - 二叉树中的 "marker for NULL pointers"是什么?

c# - .NET Xml 反序列化,xsi :type attribute 的问题/错误

ruby - 在 Ruby 中将二进制值转换为十六进制

android - 为什么自定义 View 不失效?

jquery - 如何在 Angular 2 Ionic 2 RC 2 中使用手机 mask

c# - 在 Metro 风格应用程序中模拟按钮单击

c# - 如何在 C# 中使用 WebClient 下载文件并触发事件处理程序并支持超时属性?