2010-09-05 5 views
0

J'ai créé un WinForm et j'y ajoutais des boutons dynamiques, comment je peux faire face avec ses événementsC# comment faire face à des événements pour les boutons créés multi dynamiques

public static void Notify() 
{ 

    var line = 3; 

    Form fm = new Form(); 
    fm.Text = "Hello!"; 
    fm.ShowInTaskbar = false; 
    fm.ShowIcon = false; 
    fm.MinimizeBox = false; 
    fm.MaximizeBox = false; 
    fm.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    fm.TopMost = true; 
    fm.ClientSize = new Size(150, 75 * line/2); 
    Rectangle workingArea = Screen.PrimaryScreen.WorkingArea; 
    int left = workingArea.Width - fm.Width-5; 
    int top = workingArea.Height - fm.Height-4; 
    fm.Location = new Point(left, top); 
    fm.StartPosition = FormStartPosition.Manual; 

    var buttomArray = new Button[line]; 

    for (int i = 0; i < line; i++) 
    { 
     buttomArray[i] = new Button(); 
     buttomArray[i].Text = "Button " + (i + 1); 
     buttomArray[i].Location = new Point(10,30*(i+1) - 16); 
     buttomArray[i].Size = new Size(130,25); 
     fm.Controls.AddRange(new Control[] { buttomArray[i] }); 
    } 

    fm.Show(); 
} 

Je veux être en mesure de faire un peu différent choses quand je clique sur le bouton différent (peut-être que je peux utiliser le « nom » comme identifiant?)

acclamations

Répondre

4

Il suffit d'attribuer le gestionnaire Click:

for (int i = 0; i < 10; i++) 
{ 
    var btn = new Button(); 
    btn.Text = "Button " + i; 
    btn.Location = new Point(10, 30 * (i + 1) - 16); 
    btn.Click += (sender, args) => 
    { 
     // sender is the instance of the button that was clicked 
     MessageBox.Show(((Button)sender).Text + " was clicked"); 
    }; 
    Controls.Add(btn); 
} 
+0

Merci vous avez travaillé parfaitement :-) –

3

Abonnez-vous à l'événement Button.Click. Joignez les données que vous souhaitez utiliser dans le gestionnaire de clics à la propriété Tag pendant que vous êtes dans la boucle de création.

for (int i = 0; i < line; i++) 
    { 
     buttomArray[i] = new Button(); 
     buttomArray[i].Tag=i; 
    ..... 

Dans le gestionnaire de clic, l'expéditeur sera le bouton (vous pouvez lancer à elle) et l'étiquette contiendra votre valeur.

Button btn=(Button)sender; 
int value=(int)btn.Tag; 

La propriété Tag accepte tout type. Par conséquent, vous pouvez y attacher n'importe quelle valeur.

+0

Merci la propriété Tag sera sûr à portée de main :-) –

+0

@ Data-Base: Cela dépend de la façon dont votre code est construit. En utilisant le Tag-propety est plus vieux-scool. Si vous êtes habitué à déclarer des méthodes eventhandler pour chaque événement, c'est la voie à suivre. La manière inline est plus élégante et efficace mais pas pour tout le monde. En plus de cela, il peut rendre le code illisible s'il est utilisé de façon inadéquate. – HCL

Questions connexes