我想创建一个小控件,允许我的应用程序的用户定义组合键,并以人类可读的格式显示它们。
例如,我目前有一个文本框,如果用户有焦点然后按一个键,它将在文本框中记录并显示按下的键,我的问题是关键组合或特殊键(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。
我认为我误解了解密键盘输入的一些部分,所以任何帮助都会很棒 - 谢谢。
答案 0 :(得分:0)
作为一个选项,你可以创建一个基于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;
}
}