Come è possibile determinare quale pulsante del mouse ha generato l'evento click in WPF?
-
13-09-2019 - |
Domanda
Ho un bottone che mi innescare OnClick
ogni volta che c'è un clic su tale pulsante. Mi piacerebbe sapere quale pulsante del mouse cliccato su quel pulsante?
Quando uso il Mouse.LeftButton
o Mouse.RightButton
, entrambi mi dica " realsed ", che è il loro stato dopo il clic.
Voglio solo sapere quale cliccato sul mio tasto. Se cambio EventArgs
a MouseEventArgs
, ricevo errori.
XAML: <Button Name="myButton" Click="OnClick">
private void OnClick(object sender, EventArgs e)
{
//do certain thing.
}
Soluzione
Se stai usando solo l'evento Click del pulsante, allora l'unico pulsante del mouse che il fuoco è il pulsante principale del mouse.
Se hai ancora bisogno di sapere in particolare se era il tasto sinistro o destro, quindi è possibile utilizzare lo SystemInformation per ottenerlo.
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.
}
}
Modifica Il WPF equivalente a SystemInformation è SystemParameters, che possono essere utilizzati al posto. Anche se è possibile includere System.Windows.Forms come riferimento per ottenere lo SystemInformation senza influenzare negativamente l'applicazione in alcun modo.
Altri suggerimenti
Si può lanciare come di seguito:
MouseEventArgs myArgs = (MouseEventArgs) e;
E quindi ottenere le informazioni con:
if (myArgs.Button == System.Windows.Forms.MouseButtons.Left)
{
// do sth
}
La soluzione funziona in VS2013 e non si hanno più utilizzare evento MouseClick;)
Hai ragione, Jose, è con l'evento MouseClick. Ma è necessario aggiungere un po 'di delegato:
this.button1.MouseDown + = new System.Windows.Forms.MouseEventHandler (this.MyMouseDouwn);
E utilizzare questo metodo nel modulo:
private void MyMouseDouwn(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
this.Text = "Right";
if (e.Button == MouseButtons.Left)
this.Text = "Left";
}