简体   繁体   English

如何确定在 C# 中是单击 Right Ctrl/Shift/Alt 还是 Left?

[英]How to determine whether Right Ctrl/Shift/Alt or Left is being clicked in C#?

I want to use Right or Left Control/Shift/Alt in C# but When I type我想在 C# 中使用 Right 或 Left Control/Shift/Alt 但是当我输入时

 private void Form1_KeyDown(or KeyPress)(object sender, KeyEventArgs e)
    {
        if (e.Modifiers == Keys.RControlKey) //(or e.KeyCode)
        {
            //Code
        }
    }

but it doesn't work...same with Shift and Alt但它不起作用......与Shift和Alt相同

So what is the wrong here?那么这里有什么问题呢?

Not sure this solve your question or not.不确定这是否能解决您的问题。

 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 Event:按键事件:

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.control.keyup(v=vs.110).aspx

Keys:钥匙:

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

Eg, if you press RControlKey+A, it creates several events.例如,如果您按 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

From the 1st or the last event you can know which one (left or right) was clicked.从第一个或最后一个事件中,您可以知道点击了哪个(左侧或右侧)。 This means you may need to cache the key code as there are 2 keyUp/keyDown events.这意味着您可能需要缓存密钥代码,因为有 2 个 keyUp/keyDown 事件。

In the KeyEventArgs there are properties Ctrl, Alt and Shift that shows if these buttons are pressed.在 KeyEventArgs 中,有属性 Ctrl、Alt 和 Shift 显示这些按钮是否被按下。 Or you can do check if (Keyboard.IsKeyDown(Key.P) && Keyboard.IsKeyDown(Key.LeftCtrl)) {} in your event handler.或者您可以在您的事件处理程序中检查 (Keyboard.IsKeyDown(Key.P) && Keyboard.IsKeyDown(Key.LeftCtrl)) {}。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM