2010-01-30 4 views
5

Est-il possible de créer un tableau de contrôles? Est-il possible d'obtenir l'index d'un contrôle si plus d'un des contrôles dans le tableau partagent le même gestionnaire d'événements?C# créer un tableau de contrôles

+0

S'il vous plaît, définir les composants. Peut-être qu'un échantillon de code aiderait. –

+0

par exemple: Je veux avoir 30 boutons sur un formulaire qui partagent le même événement de clic – Kevin

+0

Le paramètre de l'expéditeur de l'événement click sera le bouton qui a généré le clic, donc obtenir l'index serait 'Array.IndexOf (buttonArray, expéditeur) ' – shf301

Répondre

7

Ceci est certainement possible de le faire. Le partage du gestionnaire d'événements est assez facile à faire dans ce cas car le Button qui a déclenché l'événement est envoyé dans le cadre des arguments d'événement. Ce sera la valeur sender et peut être jeté en arrière à un Button

Voici quelques exemples de code

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

cette solution fonctionne pour moi. C'est exactement ce que je cherchais. – Kevin

4

Sur la base de commentaires Kevins:

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

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