簡體   English   中英

獲取 Keyboard Keydown 事件並在 Label 上寫入鍵名

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

我的要求是編寫 keyup 事件並將其寫入 label,

我已經為它開發了功能,但它沒有效率或優化,我需要一些幫助來優化代碼,以及一些前進的方向。 我對 c# 很陌生,所以請多多包涵,謝謝。 我將包含代碼供您參考。

        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" : "");

大多數情況下使用字符串格式化程序,例如。 枚舉的 $"{key}" 將起作用。 如果對人類不友好,則需要更具體的實現 - 正如@Reza Aghaei 所建議的那樣。

就像是

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

據我記得,按住組合鍵(例如“Shift”)是事件中的額外部分,因此也需要查看。

您可以使用e.KeyCode.ToString()來簡化代碼。 這將為您提供您想要的大多數鍵的鍵“文本”。 但是,對於某些鍵,您需要使用條件。 例子:

    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