Come è possibile determinare quale pulsante del mouse ha generato l'evento click in WPF?

StackOverflow https://stackoverflow.com/questions/977329

  •  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. 
}
È stato utile?

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";
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top