2010-09-28 14 views
18

Tengo 6 botones que quiero adjuntar al mismo controlador. ¿Cómo puedo hacer esto?¿Cómo puedo suscribir varios botones al mismo controlador de eventos y actuar de acuerdo con el botón en el que se hizo clic?

+0

cablear 6 veces .... –

+0

Eso es lo que estoy tratando de evitar. Puedo hacer doble clic en los botones de la vista de diseñador y generar 6 apéndices, pero ¿por qué querría hacer eso cuando puedo suscribir los botones a un solo evento? –

+4

en lugar de hacer doble clic, suelte la lista y seleccione el controlador existente ... –

Respuesta

20

Cuando se suscribe al evento en un botón, que es sólo un controlador de eventos estándar:

button1.Click += myEventHandler; 

Se puede utilizar el mismo código para agregar controladores para cada botón:

button1.Click += myEventHandler; 
button2.Click += myEventHandler; 
button3.Click += myEventHandler; 
button4.Click += myEventHandler; 
button5.Click += myEventHandler; 
button6.Click += myEventHandler; 

Esto hará que su controlador en myEventHandler se ejecute cuando se haga clic en cualquiera de los botones.

+0

+1 sobre la respuesta del cazador para la explicación. – KeithS

+0

aww, vamos ... ¿este tipo no tiene suficientes puntos? ; P – hunter

+1

@hunter: voté su respuesta, al menos;) –

32

Puede adjuntar el mismo evento a varios botones mediante la unión del mismo método para cada botón haga clic en evento

myButton1.Click += new MyButtonClick; 
myButton2.Click += new MyButtonClick; 
myButton3.Click += new MyButtonClick; 
myButton4.Click += new MyButtonClick; 
myButton5.Click += new MyButtonClick; 
myButton6.Click += new MyButtonClick; 

void MyButtonClick(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    //here you can check which button was clicked by the sender 
} 
+0

He usado CommandName y CommandArgument para identificar los diferentes botones vinculados al mismo evento onclick. Le di +1 por ti. – Vijayaraghavan

3

Cómo ver qué botón se pulsa:

Utilice la sender

Button myButton = (Button)sender; 

sender es un parámetro de tipo object en el controlador de eventos.

3

En lugar de hacer doble clic en el evento en el diseñador, puede pegar el nombre del controlador de eventos al evento en la cuadrícula de propiedades del diseñador.

9

alambre Sólo los botones al mismo evento:

myButton1.Click += Button_Click; 
myButton2.Click += Button_Click; 
myButton3.Click += Button_Click; 
... 

Y manejar los botones en consecuencia:

private void Button_Click(object sender, EventArgs e) 
{ 
    string buttonText = ((Button)sender).Text; 

    switch (buttonText) 
    { 
     ... 
    } 
} 

El objeto sender contiene la referencia al botón que causó el evento Click. Puede devolverlo al Button y acceder a cualquier propiedad que necesite para distinguir el botón real.

+0

El elenco terminó con información de ensamblaje faltante. –

2
myButton1.Click += new EventHandler(MyButtonClick); 
myButton2.Click += new EventHandler(MyButtonClick); 
myButton3.Click += new EventHandler(MyButtonClick); 
myButton4.Click += new EventHandler(MyButtonClick); 
myButton5.Click += new EventHandler(MyButtonClick); 
myButton6.Click += new EventHandler(MyButtonClick); 

public void MyButtonClick(object sender, MouseButtonEventArgs e) 
{ 
       switch ((sender as Button).Name) 
       { 
       case "button1": 
        //actions 
        break; 
       case "button2": 
        //actions 
        break; 
       default: 
        break; 
       } 
} 
+0

Dice "No se pudo encontrar el espacio de tipo o nombre para el botón". –

1

no soy un experto pero yo uso esto y se ve bastante sencilla

<Button x:Name="Button1" Content="Button" Click="Button_Click"/> 
<Button x:Name="Button2" Content="Button" Click="Button_Click"/> 

acaba de dar los dos botones al mismo evento de clic

0

En main.axml añadir esto a todo el botones

android:clickable="whateveryoulike" 

y todos los botones deben tener el mismo id

en el MainActivity

[Java.Interop.Export("whateveryoulike")] 
void whateveryoulike2(View v){ 
Button button=(Button) v; 
//your code here 
} 

el nombre del método no importa

Cuestiones relacionadas