2010-01-30 55 views
5

¿Es posible crear una matriz de controles? ¿Hay alguna manera de obtener el índice de un control si más de uno de los controles en la matriz comparten el mismo controlador de eventos?C# crear una matriz de controles

+0

Por favor, definir los componentes. Tal vez una muestra de código ayudaría. –

+0

por ejemplo: Quiero tener 30 botones en un formulario que comparten el mismo evento de clic – Kevin

+0

El parámetro de remitente del evento click será el botón que generó el clic, por lo que obtener el índice sería 'Array.IndexOf (buttonArray, sender) ' – shf301

Respuesta

7

Esto es ciertamente posible hacer. Compartir el controlador de eventos es bastante fácil de hacer en este caso porque el Button que generó el evento se envía como parte de los argumentos del evento. Será el valor sender y puede ser fundido de nuevo a un Button

Aquí algunos ejemplos de código

class Form1 : Form { 
    private Button[] _buttons; 
    public Form1(int count) { 
    _buttons = new Button[count]; 
    for (int i = 0; i < count; i++) { 
     var b = new Button(); 
     b.Text = "Button" + i.ToString() 
     b.Click += new EventHandler(OnButtonClick); 
     _buttons[i] = b; 
    } 
    } 
    private void OnButtonClick(object sender, EventArgs e) { 
    var whichButton = (Button)sender; 
    ... 
    } 
} 
+0

esta solución funciona para mí. es exactamente lo que estaba buscando. – Kevin

4

Basado en comentarios de Kevin:

foreach(Button b in MyForm.Controls.OfType<Button>()) 
{ 
    b.Click += Button_Click; 
} 

void Button_Click(object sender, EventArgs e) 
{ 
    Button clickedButton = sender as Button; 
} 
Cuestiones relacionadas