Je ne fais ici que retranscrire du code provenant de :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchcreatingcontrolarraysinvisualbasicnetvisualcnet.asp
mais étant en anglais, celà peut rebuter certains, c'est pourquoi j'ai décidé de le retranscrire en c#
Source / Exemple :
Vous créez une class nommé ButtonArray... le namespace correspondant au nom de l'application
using System;
namespace testindex
{
public class ButtonArray : System.Collections.CollectionBase
{
private readonly System.Windows.Forms.Form HostForm;
public ButtonArray()
{
//
// TODO : ajoutez ici la logique du constructeur
//
}
public System.Windows.Forms.Button AddNewButton()
{
// crée une nouvelle instance de la class bouton
System.Windows.Forms.Button aButton = new
System.Windows.Forms.Button();
// ajoute le bouton à la collection existante
this.List.Add(aButton);
// ajoute le bouton sur la form qui l'appel
HostForm.Controls.Add(aButton);
// initialise le composant avec les valeurs suivantes
aButton.Top = Count * 25;
aButton.Left = 100;
aButton.Tag = this.Count;
aButton.Text = "Button " + this.Count.ToString();
// créer l'évenement clic
aButton.Click += new System.EventHandler(ClickHandler);
return aButton;
}
// Remplace le constructeur par défaut par celui-ci
public ButtonArray(System.Windows.Forms.Form host)
{
HostForm = host;
this.AddNewButton();
}
// récupère ou renvoie les propriété lié au bouton
public System.Windows.Forms.Button this [int Index]
{
get
{
return (System.Windows.Forms.Button) this.List[Index];
}
}
// supprime le composant
public void Remove()
{
// test si il y a des boutons
if (this.Count > 0)
{
// ici le code supprime le dernier bouton créer, mais vous pouvez le modifier à votre guise
HostForm.Controls.Remove(this[this.Count -1]);
this.List.RemoveAt(this.Count -1);
}
}
// Créer l'évenement click sur le bouton avec pour teste un message
public void ClickHandler(Object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show("You have clicked button " +
((System.Windows.Forms.Button) sender).Tag.ToString());
}
}
}
Dans la form, dans la class principal ajoutez :
ButtonArray MyControlArray;
Dans le code il suffira de créer les boutons par :
MyControlArray = new ButtonArray(this);
et pour les boutons suivants:
MyControlArray.AddNewButton();
Pour supprimer :
MyControlArray.Remove();
On peut maintenant utilisé l'index sur le controle par MyControlArray[0].Text = "test";
Conclusion :
Si vous voulez plus d'information hésitez pas à aller sur msdn, il est fait pour ça.