在KeyDown事件上筛选KeyCode的更有效方法 [英] More efficient way of screening KeyCodes on KeyDown Event

查看:113
本文介绍了在KeyDown事件上筛选KeyCode的更有效方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当用户尝试使用KeyDown事件仅将有用数据输入到表单字段中时,我正在尝试触发事件执行一些工作.但是,我不断收到错误警报,因为KeyDown事件仅适用于任何键!

I'm trying to fire an event perform some work when the user tries to enter only useful data into a form-field using the KeyDown event. But, I keep getting false alarms because the KeyDown event works for just any key!

我正在尝试不触发按钮的事件,例如"Alt,Control,Shift,Esc,F键等".最好的方法是什么?

I'm trying not to make the event fire for buttons such as "Alt, Control, Shift, Esc, the F-keys, etc." What's the best way of doing this?

到目前为止,我是这样的:

What I have so far is this:

    private void formControl_KeyModified(object sender, KeyEventArgs e)
    {
        if (e.KeyCode != Keys.Shift && e.KeyCode != Keys.CapsLock && e.KeyCode != Keys.Tab && e.KeyCode != Keys.Escape &&
            e.KeyCode != Keys.Insert && e.KeyCode != Keys.Home && e.KeyCode != Keys.End && e.KeyCode != Keys.PageUp &&
            e.KeyCode != Keys.PageDown && e.KeyCode != Keys.Up && e.KeyCode != Keys.Down && e.KeyCode != Keys.Left &&
            e.KeyCode != Keys.Right && e.KeyCode != Keys.Control && e.KeyCode != Keys.Alt && e.KeyCode != Keys.NumLock &&
            e.KeyCode != Keys.Insert && e.KeyCode != Keys.None && e.KeyCode != Keys.PrintScreen && e.KeyCode != Keys.Help &&
            e.KeyCode != Keys.ControlKey && e.KeyCode != Keys.ShiftKey && e.KeyCode != Keys.Sleep && e.KeyCode != Keys.LWin &&
            e.KeyCode != Keys.RWin && e.KeyCode != Keys.RMenu && e.KeyCode != Keys.LMenu && e.KeyCode != Keys.LShiftKey &&
            e.KeyCode != Keys.RShiftKey && e.KeyCode != Keys.Pause && e.KeyCode != Keys.F1 && e.KeyCode != Keys.F2 &&
            e.KeyCode != Keys.F3 && e.KeyCode != Keys.F4 && e.KeyCode != Keys.F5 && e.KeyCode != Keys.F6 && e.KeyCode != Keys.F7 &&
            e.KeyCode != Keys.F8 && e.KeyCode != Keys.F9 && e.KeyCode != Keys.F10 && e.KeyCode != Keys.F11 && e.KeyCode != Keys.F12 &&
            e.KeyCode != Keys.L)
        {
             // Do some work...
        }
    }

但是,对于我来说,这似乎并不是最好的方法. 再次,我只是想获取可以输入到文本框中的字符的键(例如213135udf!@#%@!#@#%15nfaosdf〜!@} {:?> , 等等)!任何帮助都将不胜感激,谢谢!

However, that doesn't quite seem like the best way to handle this to me. Again, I'm just trying to get keys for the characters that could be entered into a textbox (such as 213135udf!@#%@!#@#%15nfaosdf~!@}{:?>, and so on)! Any help at all will be appreciated, thanks!

此致, 艾萨克·D.

(为了清晰和高质量而编辑)

(Edited for clarity and quality)

推荐答案

您可以处理 KeyPressEventArgs 作为参数参数.

You can handle the KeyPress event of the form. The mentioned event take a KeyPressEventArgs as its arguments parameter.

使用字符. IsLetterOrDigit 函数可检查 KeyPressEventArgs.KeyChar 属性.

private void form_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

     if (char.IsLetterOrDigit(e.KeyChar)) {}
     else { e.Handled = false; }

}


您还可以尝试列出可接受的Char值的列表,然后检查其中是否包含前置字符:

You can also try to make a list of your accepted Char values, then check if the preseed character is included in it:

private void form_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

     List<Char> charList = new List<Char>;
     charList.AddRange(new Char[] { 'a', 'b' ... });

     if (charList.Contains(e.KeyChar)) {}
     else { e.Handled = false; }

}

这篇关于在KeyDown事件上筛选KeyCode的更有效方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆