我不想检测任何双键组合,所以解决方案就像
if(Keyboard.IsKeyDown(specificKey)){
}
Run Code Online (Sandbox Code Playgroud)
不会工作,除非当然,我会检查每一个关键状态,我希望我不必这样做..
private void TextBox_KeyDown_1(object sender, KeyEventArgs e)
{
Console.WriteLine(combination of keys pressed);
}
Run Code Online (Sandbox Code Playgroud)
编辑:最终目标是检测任何(不是特定组合/单键)组合键.
EDIT2:LadderLogic的解决方案非常有效.
BRA*_*mel 24
您应该将键修饰符与自定义键结合使用
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) // Is Alt key pressed
{
if (Keyboard.IsKeyDown(Key.S) && Keyboard.IsKeyDown(Key.C))
{
// do something here
}
}
Run Code Online (Sandbox Code Playgroud)
重构您的代码:XAML:
<TextBox Text="text" LostFocus="TextBox_LostFocus" KeyDown="TextBox_KeyDown" KeyUp="TextBox_KeyUp"/>
代码隐藏:
List<Key> _pressedKeys = new List<Key>();
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (_pressedKeys.Contains(e.Key))
return;
_pressedKeys.Add(e.Key);
PrintKeys();
e.Handled = true;
}
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
_pressedKeys.Remove(e.Key);
PrintKeys();
e.Handled = true;
}
private void PrintKeys()
{
StringBuilder b = new StringBuilder();
b.Append("Combination: ");
foreach (Key key in _pressedKeys)
{
b.Append(key.ToString());
b.Append("+");
}
b.Length--;
Console.WriteLine(b.ToString());
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
_pressedKeys.Clear();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16574 次 |
| 最近记录: |