views:

42

answers:

2

This really should be easy, but I can't see any obvious or intuitive solution:

I am catching a MouseDown event on a control, which gives me a MouseEventArgs object in the signature. Now I want to be able to tell if the user was holding down the "Shift" or "Control" key when they clicked. But the MouseEventArgs object doesn't contain any keyboard info!

What's the easiest way of telling whether the keyboard shift/ctrl keys were being held at the time of the click?

+1  A: 

In C#, you can check using -

Keyboard.IsKeyDown(Key.LeftShift) or key.RightShift

http://msdn.microsoft.com/en-us/library/system.windows.input.keyboard.iskeydown.aspx

http://msdn.microsoft.com/en-us/library/system.windows.input.key.aspx

Sachin Shanbhag
That's not winforms.
Hans Passant
+5  A: 

Use the Controls.ModifierKeys property to see what's pressed. For example:

    private void Form1_MouseClick(object sender, MouseEventArgs e) {
        if (Control.ModifierKeys == Keys.Control) {
            Console.WriteLine("Ctrl+Click");
        }
    }

Other modifiers are Keys.Alt and Keys.Shift. Find combinations with, say, (Keys.Control | Keys.Shift).

Hans Passant