2011-01-16 12 views
32

ユーザーはマウスをダブルクリックして何かを行うことができるフォームを持っています。今私は、ユーザーがのCtrlを押さえているかどうかを知ることができます。C#を使用してCtrlキーが押されているかどうかをテストします

ユーザーがのCtrlを押したままにしているかどうかを確認するには、キーを押しますか?あなたは.NET 4、その後、Enum.HasFlagの可用性が取り消されを使用していないが、以前のバージョンで同じ結果を達成する場合

private void Control_DoubleClick(object sender, EventArgs e) 
    { 
     if (ModifierKeys.HasFlag(Keys.Control)) 
     { 
      MessageBox.Show("Ctrl is pressed!"); 
     } 
    } 

:.NET 4を使用して

+0

http://stackoverflow.com/questions/973721/c-detecting-if-the-shift-key-is-held-when-opening-a-context-メニューShiftキー用です。しかし、その概念は同じです。 – LiamB

+0

IMO、あまり保守不能な「マジックナンバー」に頼らずに、ここで私たちを助けるために所定の要素が用意されているのは面倒な概念です。 –

+0

@GrantThomas私は、あなたが別の修飾キーではなく、上記で提供したものを正確に提供するスレッドの答えを参照していたと確信しています。 – Dan

答えて

67

ますような単純なものを使用することができます:ちょうど完全性について

private void CustomFormControl_DoubleClick(object sender, EventArgs e) 
    { 
     if ((ModifierKeys & Keys.Control) == Keys.Control) 
     { 
      MessageBox.Show("Ctrl is pressed!"); 
     } 
    } 
+1

Ahhhh ....私はまだフレームワーク2.0を使用しています。おそらくそれはアップグレードする時間です:) –

+0

おそらく、それが可能でない場合、私の2番目の例はまだトリックを行う必要があります。 –

+0

Enum.HasFlagは、ビット単位の操作を使用するよりも約16倍遅くなります。 [stackoverflow.com/questions/7368652](http://stackoverflow.com/questions/7368652/what-is-it-that-makes-enum-hasflag-so-slow) – NET3

4

でもこれも

private void Control_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     if (ModifierKeys == Keys.Control) 
      MessageBox.Show("with CTRL"); 
    } 
+0

パーフェクト。ありがとう。 –

17

...あなたは、イベントハンドラ内で直接でない場合でも、あなたはそれをテストすることができますのでは、Controlの静的プロパティです:

public static bool IsControlDown() 
{ 
    return (Control.ModifierKeys & Keys.Control) == Keys.Control; 
} 
0

同じsoneoneは上記の言ったが、少し速くなるべき、ゼロ以外のように異なるの比較しますそしてほとんどのアーキテクチャ上で以下の手順を使用します。

public static bool IsControlDown() 
{ 
    return (Control.ModifierKeys & Keys.Control) != 0; 
} 
関連する問題