¿Cómo puedo determinar qué botón del ratón provoca el evento clic en WPF?

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

  •  13-09-2019
  •  | 
  •  

Pregunta

Tengo un botón que puedo activar OnClick cada vez que hay un clic en ese botón. Me gustaría saber qué botón del ratón hace clic en ese botón?

Cuando uso el Mouse.LeftButton o Mouse.RightButton, ambos me digo " realsed ", que es su estado después del clic.

Sólo quiero saber cuál ha hecho clic en el botón de mi. Si cambio EventArgs a MouseEventArgs, recibo errores.

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

private void OnClick(object sender, EventArgs e)
{
//do certain thing. 
}
¿Fue útil?

Solución

Si estás usando el evento Click del botón, entonces el único botón del ratón que se disparará es el botón principal del ratón.

Si aún necesita saber específicamente si era el botón izquierdo o derecho, entonces usted puede utilizar el SystemInformation para obtenerlo.

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

Editar: El WPF equivalente a SystemInformation es SystemParameters, que pueden ser utilizados en su lugar. Aunque se puede incluir System.Windows.Forms como referencia para obtener el SystemInformation sin afectar negativamente a la aplicación de ninguna manera.

Otros consejos

Puede fundido, como a continuación:

MouseEventArgs myArgs = (MouseEventArgs) e;

Y a continuación, obtener la información con:

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

La solución funciona en VS2013 y usted no tiene que utilizar el evento MouseClick más;)

Tienes razón, José, que es con el evento MouseClick. Pero hay que añadir un poco de delegado:

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

Y el uso de este método en su forma:

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

        if (e.Button == MouseButtons.Left)
            this.Text = "Left";
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top