2009-10-09 73 views
2

我期待通过检测特定键的组合(转义序列),其不能被输入了如Ctrl + C键,Ctrl + Z等的按键来模拟超级终端功能为我在C#串行通信。我知道这些键有它们的ASCII等价物,并可以这样传输。但是我在检测多个按键时遇到问题。我的一些代码,提供作为参考:检测多个同时的按键

private void Transmitted_KeyDown(object sender, KeyEventArgs e) 
{ 


    if (e.Modifiers == Keys.Control || e.Modifiers== Keys.Shift || e.Modifiers==Keys.Alt) 
    { 
     var test = (char)e.KeyValue; // Only able to detect a single keypress! 


     ComPort.Write(test.ToString()); 

    } 
} 

回答

6

如果您正在寻找正规键,那么你可以将它们存储在列表:在的KeyDown,添加的关键列表。在按键上,将其从列表中删除。在KeyDown上,检查列表中的内容。

但是,我不知道有KEYDOWN/KEYUP事件修饰键如Ctrl,移位,ALT。对于那些你可以做这样的事情:

bool CtrlDown = ((e.Modifiers & Keys.Control) > 0); 
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control) 
+0

我如何将能够以这样的方式来检测键组合? – Recursive 2009-10-10 02:55:34

2

e.KeyCode包含键值(+)修饰符信息

e.KeyCode = e.KeyValue | e.Modifiers 

使用e.KeyCode

+0

e.Keycode仍然无法正常工作。当我按Ctrl + C我只是读C的ASCII值,而不是整个序列。 – Recursive 2009-10-09 16:01:44

0

不知道,如果你有任何运气。

但试试这个代码:

 switch (e.KeyData) 
     { 
      case Keys.Control: 
       { 
        if (e.KeyData == Keys.Subtract) 
        { } 
        else if (e.KeyData == Keys.C) 
        { } 
        break; 
       } 
     }