簡體   English   中英

創建一個控件以捕獲使用定義的按鍵組合

[英]Creating a control to capture use defined key combinations

我想創建一個小的控件,允許我的應用程序的用戶定義按鍵組合,並以人類可讀的格式顯示它們。

例如,我當前有一個文本框,如果用戶有焦點然后按下某個鍵,它將記錄並顯示該文本框內所按下的鍵,我的問題是涉及組合鍵或特殊鍵(CTRL, ALT,BACKSPACE等)

這是我目前使用的簡單代碼,僅用於實驗:

    private void tboxKeyCombo_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (tboxKeyCombo.Focused)
        {
            string sKeyboardCombo = String.Empty;

            if (char.IsLetterOrDigit(e.KeyChar))
            {
                sKeyboardCombo += e.KeyChar.ToString();
            }
            else if (char.IsControl(e.KeyChar))
            {
                sKeyboardCombo += "CTRL";
            }

            tboxKeyCombo.Text += sKeyboardCombo + "+";
        }
    }

目前,它的行為非常奇怪,如果我按“ CTRL + O”,它將在文本框中顯示“ CTRL +”。 即使我按BACKSPACE,它仍然會打印CTRL。

我認為我對理解鍵盤輸入的某些部分有誤解,所以任何幫助都會很棒-謝謝。

作為一種選擇,您可以基於TextBox創建一個TextBox並將其設置為只讀,然后重寫某些鍵函數(如ProcessCmdKey ,然后使用KeysConverter類將按下的鍵轉換為字符串。

using System.Windows.Forms;
public class MyTextBox : TextBox
{
    public MyTextBox() { this.ReadOnly = true; }
    public Keys ShortcutKey { get; set; }
    public new bool ReadOnly
    {
        get { return true; }
        set { base.ReadOnly = true; }
    }
    KeysConverter converter = new KeysConverter();
    protected override bool ProcessCmdKey(ref Message m, Keys keyData)
    {
        ShortcutKey = keyData;
        this.Text = converter.ConvertToString(keyData);
        return false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM