2010-01-30 8 views
5

Bir kontrol dizisi oluşturmak mümkün mü? Dizideki denetimlerin birden çok aynı olay işleyicisini paylaşırsa, bir denetimin dizinini almanın bir yolu var mı? Kevins yorum dayanarakC# bir dizi kontrol yaratın

+0

tanımlamak Lütfen bileşenleri. Belki bir kod örneği yardımcı olur. –

+0

örneğin: Aynı tıklama olayını paylaşan bir formda 30 düğmenin olmasını istiyorum – Kevin

+0

Tıklatma olayının gönderici parametresi, tıklamayı oluşturan düğmedir, dolayısıyla dizinin alınması Array.IndexOf olur (buttonArray, gönderici)) '' – shf301

cevap

7

Bu kesinlikle yapmak mümkündür. Bu olayda olay işleyicisini paylaşmak oldukça kolaydır çünkü olayı ortaya çıkaran Button olay arızasının bir parçası olarak gönderilir. Bu sender değeri olacaktır ve burada bir Button

geri dökülebilir bazı örnek kodunu

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

Bu çözüm benim için çalışıyor. Tam olarak aradığım şey bu. – Kevin

4

:

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

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