2011-07-19 6 views
1

Je me demandais comment aller à faire quelque chose comme ceci:forme Populate avec des contrôles basés sur la valeur int

Je dois créer un formulaire avec un certain nombre de boutons à partir d'une valeur entière représentant le nombre de boutons nécessaire, puis donnez-leur leurs propres noms spécifiques afin que chacun puisse avoir ses propres gestionnaires d'événements.

Un exemple réel que je peux penser à faire est l'écran de connexion Windows, où le nombre de contrôles créés est basé sur le nombre d'utilisateurs et s'il existe un compte Invité ou non. Comment penses-tu qu'ils ont programmé ça?

Merci.

Répondre

1
for (int i = 0; i < 5; i++) 
{ 
    Button newButton = new Button(); 
    newButton.Name = "button" + i.ToString(); 
    newButton.Text = "Button #" + i.ToString(); 
    newButton.Location = new Point(32, i * 32); 
    newButton.Click += new EventHandler(button1_Click); 
    this.Controls.Add(newButton); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (((Button)sender).Name == "button0") 
    MessageBox.Show("Button 0"); 
    else if (((Button)sender).Name == "button1") 
    MessageBox.Show("Button 1"); 
} 
+0

Comment chaque bouton est-il personnalisé? Utiliser newButton.Text = "foobar" changerait tous les boutons, n'est-ce pas? –

+0

@Jared Quelle que soit la façon dont vous déterminez le nombre de boutons nécessaires, vous devriez probablement avoir une liste correspondante de noms et autres. – LarsTech

+0

Merci. Très bonne réponse. –

0

D'une manière ou d'une autre, vous devez définir les noms de tous les boutons. Je vous suggère de créer un nouveau tableau de chaînes et d'écrire les noms des boutons, puis de les utiliser dans la boucle de création des boutons:

//do the same length as the for loop below: 
string[] buttonNames = { "button1", "button2", "button3", "button4", "button5" }; 

for (int i = 0; i < buttonNames.Lenght; i++) 
{ 
    Button newButton = new Button(); 
    newButton.Name = "button" + i.ToString(); 
    newButton.Text = buttonNames[i]; //each button will now get its own name from array 
    newButton.Location = new Point(32, i * 32); 
    newbutton.Size = new Size(25,100); //maybe you can set different sizes too (especially for X axes) 
    newButton.Click += new EventHandler(buttons_Click); 
    this.Controls.Add(newButton); 
} 


private void buttons_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button 
    MessageBox.Show("You clicked button: " + btn.Text + "."); 
} 
Questions connexes