WPF でどのマウス ボタンをクリック イベントが発生したかを確認するにはどうすればよいですか?
-
13-09-2019 - |
質問
トリガーするボタンがあります OnClick
そのボタンをクリックするたびに。どのマウス ボタンがそのボタンをクリックしたかを知りたいのですが?
を使用するときは、 Mouse.LeftButton
または Mouse.RightButton
, 、両方とも私に言います」実現した" これはクリック後の状態です。
誰が私のボタンをクリックしたのか知りたいだけです。私が変わったら EventArgs
に MouseEventArgs
, 、エラーが発生します。
XAML: <Button Name="myButton" Click="OnClick">
private void OnClick(object sender, EventArgs e)
{
//do certain thing.
}
解決
Button の 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 を取得するための参照として System.Windows.Forms を含めることはできます。
他のヒント
以下のようにキャストできます。
MouseEventArgs myArgs = (MouseEventArgs) e;
そして、次のようにして情報を取得します。
if (myArgs.Button == System.Windows.Forms.MouseButtons.Left)
{
// do sth
}
このソリューションは VS2013 で動作するため、MouseClick イベントを使用する必要はなくなりました ;)
そうです、ホセ、それは MouseClick イベントを使用したものです。ただし、小さなデリゲートを追加する必要があります。
this.button1.MouseDown += new 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";
}