如何确定是否在C#中单击了右Ctrl / Shift / Alt或Left?

时间:2015-09-07 14:41:59

标签: c#

我想在C#中使用Right或Left Control / Shift / Alt 但是当我输入

2015-09-07 09:39:56.224 IKImageViewDemo[1565:108561] An uncaught exception was raised
2015-09-07 09:39:56.224 IKImageViewDemo[1565:108561] Setting autoresizing constraints when autoresizing is off
2015-09-07 09:39:56.231 IKImageViewDemo[1565:108561] (
    0   CoreFoundation                      0x00007fff974c9a22 __exceptionPreprocess + 178
    1   libobjc.A.dylib                     0x00007fff933b373c objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff974c97fa +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x00007fff8c2178ec -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   AppKit                              0x00007fff964ae2d7 -[NSView(NSConstraintBasedLayout) _setAutoresizingConstraints:] + 143
    5   AppKit                              0x00007fff9648b5ca -[NSView setTranslatesAutoresizingMaskIntoConstraints:] + 162
    6   ImageKit                            0x00007fff8aabc6d8 -[IKSaveOptionsHandler setSavePanel:] + 260
    7   IKImageViewDemo                     0x0000000100002b3c -[Controller saveImage:] + 204
    8   libsystem_trace.dylib               0x00007fff9923d082 _os_activity_initiate + 75
    9   AppKit                              0x00007fff966ac685 -[NSApplication sendAction:to:from:] + 460

但它不起作用......与Shift和Alt相同

那么这里有什么不对?

3 个答案:

答案 0 :(得分:1)

不确定这是否可以解决您的问题。

 private void Form1_KeyUp(object sender, KeyEventArgs e)
 {
    switch(e.KeyCode)
    {
    case Keys.LMenu:
    //Your code for Left Alt Key
    break;
    case Keys.LControlKey:
    //Your code for Left Control Key
    break;
    case Keys.LShiftKey:
    //Your code for Left Shift Key
    break;
    case Keys.RControlKey:
    //Your code for Right Control Key
    break;
    case Keys.RMenu:
    //Your code for Right Alt Key
    break;
    case Keys.RShiftKey:
    //You code for Right Shift Key
    break;
    }
}

KeyUp事件:

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup(v=vs.110).aspx

键:

https://msdn.microsoft.com/en-US/library/system.windows.forms.keys(v=vs.110).aspx

答案 1 :(得分:0)

在KeyEventArgs中有属性Ctrl,Alt和Shift,显示是否按下了这些按钮。 或者您可以在事件处理程序中检查是否(Keyboard.IsKeyDown(Key.P)&& Keyboard.IsKeyDown(Key.LeftCtrl)){}。

答案 2 :(得分:0)

例如,如果按RControlKey + A,它会创建多个事件。

private void watcher_keyDown(object sender, KeyEventArgs e)
{
    Console.WriteLine("keyDown: " + e.KeyData.ToString());
}

private void watcher_KeyPress(object sender, KeyPressEventArgs e)
{
    Console.WriteLine("keyPress: " + e.KeyChar.ToString());
}

public void watcher_KeyUp(object sender, KeyEventArgs e)
{
    Console.WriteLine("keyUp: " + e.KeyData.ToString());
}

keyDown: RControlKey
keyDown: A, Control
keyPress: 
keyUp: A, Control
keyUp: RControlKey, Control

从第1个或最后一个事件中,您可以知道单击了哪一个(左侧或右侧)。这意味着您可能需要缓存密钥代码,因为有2个keyUp / keyDown事件。

相关问题