Indexer des boutons

Contenu du snippet

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.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.