2010-01-30 15 views
5

Czy można utworzyć tablicę kontrolek? Czy istnieje sposób na uzyskanie indeksu kontrolki, jeśli więcej niż jedna z formantów w tablicy współużytkuje tę samą procedurę obsługi zdarzeń?C# utwórz tablicę kontrolek

+0

Proszę definiują komponenty. Może próbka kodu pomogłaby. –

+0

na przykład: Chcę mieć 30 przycisków w formularzu, które współdzielą jedno zdarzenie kliknięcia. – Kevin

+0

Parametrem nadawcy zdarzenia kliknięcia będzie przycisk, który wygenerował kliknięcie, więc uzyskanie indeksu będzie miało wartość "Array.IndexOf (buttonArray, sender) ' – shf301

Odpowiedz

7

Jest to z pewnością możliwe do zrobienia. Udostępnianie obsługi zdarzeń jest dość łatwe do zrobienia w tym przypadku, ponieważ Button, które podniosło zdarzenie, jest wysyłane jako część argumentów zdarzeń. Będzie to wartość sender i mogą być oddane z powrotem do Button

Oto przykładowy kod

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

to rozwiązanie działa dla mnie. dokładnie tego szukałem. – Kevin

4

podstawie Kevins komentarza:

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

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