简体   繁体   English

获取 Keyboard Keydown 事件并在 Label 上写入键名

[英]Get the Keyboard Keydown event and Write the key name on a Label

my requirement is to write the keyup events and write it on a label,我的要求是编写 keyup 事件并将其写入 label,

I have developed the functionality for it, but it not efficient or optimized, I need some help to optimize the code, and some direction to proceed.我已经为它开发了功能,但它没有效率或优化,我需要一些帮助来优化代码,以及一些前进的方向。 I'm very new to c#, so please bear with me guys thanks in advance.我对 c# 很陌生,所以请多多包涵,谢谢。 I'll include the code for your reference.我将包含代码供您参考。

        private void Form1_KeyUp(object sender, KeyEventArgs e)

        label1.Text = (Convert.ToBoolean(GetAsyncKeyState(Keys.LShiftKey)) ? "LShift" : "")
        + (Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey)) ? "RShift" : "")
        + (Convert.ToBoolean(GetAsyncKeyState(Keys.LControlKey)) ? "Lcontrol" : "")
        + (Convert.ToBoolean(GetAsyncKeyState(Keys.RControlKey)) ? "Rcontrol" : "")
        + (Convert.ToBoolean(GetAsyncKeyState(Keys.LMenu)) ? "L Alt" : "")
        + (e.KeyCode == Keys.Escape ? "Ëscape" : "")
        + (e.KeyCode == Keys.Enter ? "Return" : "")
        + (e.KeyCode == Keys.CapsLock ? "CapsLock" : "")
        + (e.KeyCode == Keys.LWin ? "Windows key" : "")
        + (e.KeyCode == Keys.D0 ? " D0 " : "")
        + (e.KeyCode == Keys.D1 ? " D1 " : "")
        + (e.KeyCode == Keys.D2 ? " D2 " : "")
        + (e.KeyCode == Keys.D3 ? " D3 " : "")
        + (e.KeyCode == Keys.D4 ? " D4 " : "")
        + (e.KeyCode == Keys.D5 ? " D5 " : "")
        + (e.KeyCode == Keys.D6 ? " D6 " : "")
        + (e.KeyCode == Keys.D7 ? " D7 " : "")
        + (e.KeyCode == Keys.D8 ? " D8 " : "")
        + (e.KeyCode == Keys.D9 ? " D9 " : "")
        + (e.KeyCode == Keys.NumPad0 ? "Numpad0 " : "")
        + (e.KeyCode == Keys.NumPad1 ? "Numpad1 " : "")
        + (e.KeyCode == Keys.NumPad2 ? "Numpad2 " : "")
        + (e.KeyCode == Keys.NumPad3 ? "Numpad3 " : "")
        + (e.KeyCode == Keys.NumPad4 ? "Numpad4 " : "")
        + (e.KeyCode == Keys.NumPad5 ? "Numpad5 " : "")
        + (e.KeyCode == Keys.NumPad6 ? "Numpad6 " : "")
        + (e.KeyCode == Keys.NumPad7 ? "Numpad7 " : "")
        + (e.KeyCode == Keys.NumPad8 ? "Numpad8 " : "")
        + (e.KeyCode == Keys.NumPad9 ? "Numpad9 " : "")
        + (e.KeyCode == Keys.A ? " A" : "")
              + (e.KeyCode == Keys.B ? " B" : "")
              + (e.KeyCode == Keys.C ? " C" : "")
              + (e.KeyCode == Keys.D ? " D" : "")
              + (e.KeyCode == Keys.E ? " E" : "")
              + (e.KeyCode == Keys.F ? " F" : "")
              + (e.KeyCode == Keys.G ? " G" : "")
              + (e.KeyCode == Keys.H ? " H" : "")
              + (e.KeyCode == Keys.I ? " I" : "")
              + (e.KeyCode == Keys.J ? " J" : "")
              + (e.KeyCode == Keys.K ? " K" : "")
              + (e.KeyCode == Keys.L ? " L" : "")
              + (e.KeyCode == Keys.M ? " M" : "")
              + (e.KeyCode == Keys.N ? " N" : "")
              + (e.KeyCode == Keys.O ? " O" : "")
              + (e.KeyCode == Keys.P ? " P" : "")
              + (e.KeyCode == Keys.Q ? " Q" : "")
              + (e.KeyCode == Keys.R ? " R" : "")
              + (e.KeyCode == Keys.S ? " S" : "")
              + (e.KeyCode == Keys.T ? " T" : "")
              + (e.KeyCode == Keys.U ? " U" : "")
              + (e.KeyCode == Keys.V ? " V" : "")
              + (e.KeyCode == Keys.W ? " W" : "")
              + (e.KeyCode == Keys.X ? " X" : "")
              + (e.KeyCode == Keys.Y ? " Y" : "")
              + (e.KeyCode == Keys.Z ? " Z" : "")
              + (e.KeyCode == Keys.Oem1 ? "Semi colon" : "")
              + (e.KeyCode == Keys.Oem2 ? "Slash" : "")
              + (e.KeyCode == Keys.Oem3 ? "Left quote" : "")
              + (e.KeyCode == Keys.Oem4 ? "Open Brackets" : "")
              + (e.KeyCode == Keys.Oem5 ? "Backslash" : "")
              + (e.KeyCode == Keys.Oem6 ? "Close Brackets" : "")
              + (e.KeyCode == Keys.Oem7 ? "Double quotes" : "")
              + (e.KeyCode == Keys.Oem8 ? "Oem8" : "")
              + (e.KeyCode == Keys.OemPeriod ? "period" : "")
              + (e.KeyCode == Keys.Oemcomma ? "comma" : "")
              + (e.KeyCode == Keys.OemMinus ? "Oem minus" : "")
              + (e.KeyCode == Keys.Oemplus ? "Oem equals" : "")
              + (e.KeyCode == Keys.NumLock ? "NumLock" : "")
              + (e.KeyCode == Keys.Add ? "Add" : "")
              + (e.KeyCode == Keys.Subtract ? "Subtract" : "")
              + (e.KeyCode == Keys.Multiply ? "Multiply" : "")
              + (e.KeyCode == Keys.Divide ? "Divide" : "")
              + (e.KeyCode == Keys.Decimal ? "Decimal" : "")
              + (e.KeyCode == Keys.F1 ? "F1 pressed" : "")
              + (e.KeyCode == Keys.F2 ? "F2 pressed" : "")
              + (e.KeyCode == Keys.F3 ? "F3 pressed" : "")
              + (e.KeyCode == Keys.F4 ? "F4 pressed" : "")
              + (e.KeyCode == Keys.F5 ? "F5 pressed" : "")
              + (e.KeyCode == Keys.F6 ? "F6 pressed" : "")
              + (e.KeyCode == Keys.F7 ? "F7 pressed" : "")
              + (e.KeyCode == Keys.F8 ? "F8 pressed" : "")
              + (e.KeyCode == Keys.F9 ? "F9 pressed" : "")
              + (e.KeyCode == Keys.F10 ? "F10 pressed" : "")
              + (e.KeyCode == Keys.F11 ? "F11 pressed" : "")
              + (e.KeyCode == Keys.F12 ? "F12 pressed" : "")
              + (e.KeyCode == Keys.VolumeDown ? "Volume Down" : "")
              + (e.KeyCode == Keys.VolumeUp ? "Volume Up" : "")
              + (e.KeyCode == Keys.VolumeMute ? "Volume Mute" : "")
              + (e.KeyCode == Keys.MediaPlayPause ? "Play / Pause" : "")
              + (e.KeyCode == Keys.MediaNextTrack ? "Play Next" : "")
              + (e.KeyCode == Keys.MediaPreviousTrack ? "Play Previous" : "")
              + (e.KeyCode == Keys.NumLock ? "NumLock" : "")
              + (e.KeyData == Keys.Tab ? "Tab" : "");

For the most part using the string formatter eg.大多数情况下使用字符串格式化程序,例如。 $"{key}" for an enumeration will work.枚举的 $"{key}" 将起作用。 When the are not human friendly then a more specific implementation is needed - as suggested by @Reza Aghaei.如果对人类不友好,则需要更具体的实现 - 正如@Reza Aghaei 所建议的那样。

Something like就像是

switch(e.Keycode)
{
    case Keys.Oem1:
        label1Text = $"{Semi Colon}";
        break; 
    case default:
        label1Text = $"{key}";
        break;
}

As far as I remember, holding key combinations - like 'Shift' - are extra parts in the event so will need looking at too.据我记得,按住组合键(例如“Shift”)是事件中的额外部分,因此也需要查看。

You can simplify your code by using e.KeyCode.ToString() .您可以使用e.KeyCode.ToString()来简化代码。 This will give you the key 'text' for most of the keys how you want it.这将为您提供您想要的大多数键的键“文本”。 However, for some keys, you need to use conditions.但是,对于某些键,您需要使用条件。 Example:例子:

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        string keyText = e.KeyCode.ToString();
        keyText =
            keyText == "Oem1" ? "Semi colon" :
            keyText == "Oem2" ? "Slash" :
            keyText == "Oem3" ? "Left quote" :
            keyText == "Oem4" ? "Open Brackets" :
            keyText == "Oem5" ? "Backslash" :
            keyText == "Oem6" ? "Close Brackets" :
            keyText == "Oem7" ? "Double quotes" :
            keyText == "OemPeriod" ? "period" :
            keyText == "Oemcomma" ? "comma" :
            keyText == "OemMinus" ? "Oem minus" :
            keyText == "Oemplus" ? "Oem equals" : keyText;


       label1.Text+= keyText;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM