在System.Windows.Input 里有着所有键的集合,经测试要注意以下几点(纯实践所得经验,还请高手指明下面不明白地方的原因):
1. 普通情况下Key就够用了
2. 当某个键在特定的环境下充当某种系统默认的功能时就要用到SystemKey,如Alt键在窗口中默认是激活菜单,这时用Key来判断就不起作用了。
如下例作示,在textBox1中按右Alt键将还是激活菜单,而左Alt键盘却实现了换行的功能。
private
void
textBox1_KeyDown(
object
sender, KeyEventArgs e)
{
if (e.SystemKey == Key.LeftAlt || e.Key == Key.RightAlt)
{
// 添加一个换行字符
textBox1.SelectedText = Environment.NewLine;
// 光标向前移动一位
textBox1.Select(textBox1.SelectionStart + 1 , 0 );
e.Handled = true ;
}
}
{
if (e.SystemKey == Key.LeftAlt || e.Key == Key.RightAlt)
{
// 添加一个换行字符
textBox1.SelectedText = Environment.NewLine;
// 光标向前移动一位
textBox1.Select(textBox1.SelectionStart + 1 , 0 );
e.Handled = true ;
}
}
3.组合键的使用,首先,组合键的实现是使用系统默认功能,所以必须用SystemKey,然后需要用到Keyboard.Modifiers,如:Alt+F
if
(Keyboard.Modifiers
==
ModifierKeys.Alt
&&
e.SystemKey
==
Key.F)
// do some work
// do some work
4. 在支持换行的控件中(如TextBox开启AcceptsReturn="True"时)回车键变成了换行功能,而Ctrl+回车键才是默认的回车功能,注意这时虽然是组合键,但只有用Key才有效(不明原因,请指教):
if
(Keyboard.Modifiers
==
ModifierKeys.Control
&&
e.Key
==
Key.Enter)
{
// 成功截取CTRL+ENTER
}
if (Keyboard.Modifiers == ModifierKeys.Control && e.SystemKey == Key.Enter)
{
// 无效
}
{
// 成功截取CTRL+ENTER
}
if (Keyboard.Modifiers == ModifierKeys.Control && e.SystemKey == Key.Enter)
{
// 无效
}