2009-06-10 5 views
2

J'ai un bouton que je déclenche OnClick chaque fois qu'il y a un clic sur ce bouton. Je voudrais savoir quel bouton de la souris a cliqué sur ce bouton?Comment puis-je déterminer quel bouton de la souris a déclenché l'événement click dans WPF?

Lorsque j'utilise le Mouse.LeftButton ou Mouse.RightButton, les deux me dire « realsed » qui est leur état après le clic. Je veux juste savoir lequel a cliqué sur mon bouton. Si je change EventArgs en MouseEventArgs, je reçois des erreurs.

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

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

remercie Jose pour éditer mon post. – paradisonoir

+0

J'ai trouvé une meilleure méthode que celle que j'avais initialement suggérée, et j'ai édité ma réponse pour l'inclure. – rmoore

Répondre

2

Si vous êtes juste en utilisant l'événement Click du bouton, le seul bouton de la souris qui se déclenche, il est le bouton principal de la souris.

Si vous avez toujours besoin de savoir précisément s'il s'agit du bouton gauche ou droit, vous pouvez utiliser SystemInformation pour l'obtenir.

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. 
     } 
    } 

Edit: L'équivalent WPF à SystemInformation est SystemParameters, qui peuvent être utilisés à la place. Bien que vous puissiez inclure System.Windows.Forms comme référence pour obtenir SystemInformation sans affecter l'application de quelque manière que ce soit.

+0

merci – paradisonoir

+0

Oui, tout mon développement est en XAML ou Silverlight. RoutedEventArgs, System.Windows.Forms.Systeminformation est simplement la meilleure et la plus rapide pour obtenir les informations système de l'ordinateur dans WPF – rmoore

+0

Oui, cela a très bien fonctionné. – paradisonoir

0

Vous avez raison, Jose, il est avec l'événement MouseClick. Mais vous devez ajouter un petit délégué:

this.button1.MouseDown + = new System.Windows.Forms.MouseEventHandler (this.MyMouseDouwn);

Et utiliser cette méthode dans votre formulaire:

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

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

Ce n'est pas correct pour WPF, vous devez utiliser un MouseButtonEventArgs, et il n'a pas de propriété de bouton, mais plutôt l'état de chaque bouton. – rmoore

+0

mais même avec privé OnClick (expéditeur d'objet, MouseButtonEventArgs e), il me donne la même erreur d'erreur de "Aucune surcharge pour 'OnClick' correspond délégué 'System.Windows.RoutedEventHandler' – paradisonoir

+0

J'ai supprimé le délégué OnClick –

2

Vous pouvez jeter comme ci-dessous:

MouseEventArgs myArgs = (MouseEventArgs) e; 

Et puis obtenir les informations avec:

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

La solution fonctionne en VS2013 et vous ne devez pas utiliser l'événement MouseClick plus;)

Questions connexes