2009-06-10 22 views
2

ボタンをクリックするたびに、私はOnClickをトリガーするボタンを持っています。どのマウスボタンがそのボタンをクリックしたのか知りたいですか?WPFでクリックイベントを発生させたマウスボタンを特定するにはどうすればよいですか?

Mouse.LeftButtonまたはMouse.RightButtonを使用すると、どちらも「realsed」と表示されます。これはクリック後の状態です。

ボタンをクリックしたことを知りたいだけです。 EventArgsMouseEventArgsに変更するとエラーが発生します。

XAML:<Button Name="myButton" Click="OnClick">

private void OnClick(object sender, EventArgs e) 
{ 
//do certain thing. 
} 
+0

Joseさんが私の投稿を編集してくれてありがとう。 – paradisonoir

+0

私は最初に提案したより良い方法を見つけ、それを含めるために私の答えを編集しました。 – rmoore

答えて

2

あなただけのボタンのClickイベントを使用している場合は、それを発射する唯一のマウスボタンがマウスの主ボタンです。

左ボタンでも右ボタンでも、具体的に知る必要がある場合は、SystemInformationを使用して取得できます。

void OnClick(object sender, RoutedEventArgs e) 
    { 
     if (SystemParameters.SwapButtons) // Or use SystemInformation.MouseButtonsSwapped 
     { 
      // It's the right button. 
     } 
     else 
     { 
      // It's the standard left button. 
     } 
    } 

編集:SystemInformationに WPF当量が代わりに使用することができるSystemParameters、です。システムに何らかの悪影響を与えることなくSystemInformation.Formsを参照としてSystemInformationを取得することはできますが、

MouseEventArgs myArgs = (MouseEventArgs) e; 

そして、との情報を得る:あなたは以下のようにキャストすることができます

+0

ありがとうXAMLウィンドウ(WPF)。 – paradisonoir

+0

...はい、すべての開発はXAMLまたはSilverlightで行われています。これはWPF向けです。 RoutedEventArgs、System.Windows.Forms.Systeminformationは、WPFでコンピュータのシステム情報を取得するための最良かつ最速の方法です。 – rmoore

+0

はい、非常にうまくいきました。 – paradisonoir

0

そうだね、ホセは、それがMouseClickとイベントであります。しかし、少しデリゲートを追加する必要があります:

this.button1.MouseDown + =新しいSystem.Windows.Forms.MouseEventHandler(this.MyMouseDouwn);

そして、あなたの形で、このメソッドを使用します。

private void MyMouseDouwn(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
      this.Text = "Right"; 

     if (e.Button == MouseButtons.Left) 
      this.Text = "Left"; 
    } 
+2

これはWPFでは正しくありません.MouseButtonEventArgsを使用する必要があり、ボタンのプロパティはなく、すべてのボタンの状態を保持します。 – rmoore

+0

でも、 プライベートvoid OnClick(オブジェクト送信者、MouseButtonEventArgs e)であっても、「OnClick」のオーバーロードが「System.Windows.RoutedEventHandler」の代理人と一致するというエラーのエラーが発生します – paradisonoir

+0

OnClickデリゲートを削除しました –

2

if (myArgs.Button == System.Windows.Forms.MouseButtons.Left) 
{ 
    // do sth 
} 

ソリューションはVS2013で動作し、あなたはもうMouseClickとイベントを使用する必要はありませんが、)

関連する問題