2
4

1 回答 1

2
  1. 在我的事件处理程序中按CtrlAltShift单独导致ControlAltShift返回。单独按下这些键中的每一个都会导致在我的事件处理程序中返回。你确定你不处理这个事件吗?trueKeyDownfalseKeyUpKeyUp

  2. 正如@sean woodward 所说,Windows Key应该映射到Keys.LWin或者Keys.RWin

  3. KeyPress事件仅在按下其中一个字符键时引发,并将返回由按下的键或按下的键组合产生的字符。Ctrl+Shift+B不是一个字符,因此您不能KeyChar单独使用来获取该信息。尝试使用KeyDownorKeyUp事件并查看Modifiers属性以获取以逗号分隔的字符串,其中包含正在按下的修饰键。如果顺序很重要,您需要像Modifiers往常一样以相同的顺序返回键,即Shift, Control, Alt即使它们不是按的方式。

这是我使用的代码,您可以尝试使用它:


KeyDown += (o, ea) =>
{
    System.Diagnostics.Debug.WriteLine("KeyDown => CODE: " + ea.KeyCode +
        ", DATA: " + ea.KeyData +
        ", VALUE: " + ea.KeyValue +
        ", MODIFIERS: " + ea.Modifiers +
        ", CONTROL: " + ea.Control +
        ", ALT: " + ea.Alt +
        ", SHIFT: " + ea.Shift);

};

KeyUp += (o, ea) =>
{
    System.Diagnostics.Debug.WriteLine("KeyUp => CODE: " + ea.KeyCode +
        ", DATA: " + ea.KeyData +
        ", VALUE: " + ea.KeyValue +
        ", MODIFIERS: " + ea.Modifiers +
        ", CONTROL: " + ea.Control +
        ", ALT: " + ea.Alt +
        ", SHIFT: " + ea.Shift);
};

KeyPress += (o, ea) => 
{
    System.Diagnostics.Debug.WriteLine("KeyPress => CHAR: " + ea.KeyChar);
};
于 2013-02-17T06:07:49.617 回答