我想在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相同
那么这里有什么不对?
答案 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事件。