[英]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.