2009-11-12 3 views
0

J'utilise Visual C# 2008 Express Edition.C# - Remplissage de la structure de données au moment de l'exécution avec des références aux boutons ajoutés à TableLayoutPanel au moment du design

Si au moment de la conception que j'ai une forme [myMainForm],
auquel j'ai ajouté un TabControl [myTabControl],
et myTabControl a un seul TabPage [myTabPage],
et à ce TabPage j'ai ajouté a tableLayoutPanel [myTableLayoutPanel],
et à myTablelayoutPanel J'ai ajouté dix boutons (button1, button2, button3, etc). À l'exécution, je veux remplir une structure de données avec des références à tous les dix boutons que j'ai ajoutés à myTableLayoutPanel. Je veux travailler avec les références aux boutons de la manière la plus simple et la plus efficace possible. Est-ce un pour ... prochaine boucle en conjonction avec un tableau la meilleure approche pour s'attaquer au problème?

Je me rends compte que je pourrais ajouter les boutons par programmation au panneau, mais si je fais cela, je vais devoir ajuster leurs paramètres visuels dans le code que je préfère éviter afin de garder mon code aussi propre et simple que possible.

Si quelqu'un pouvait poster quelques lignes de code pour me lancer, je serais reconnaissant.

Merci d'avoir pris le temps de lire ceci. Codage heureux.

Cordialement,

La Chose

+0

Alors vous l'avez déjà fait fonctionner avec une boucle à travers les contrôles enfants 'myTablelayoutPanel'? Vous espérez trouver une meilleure alternative, oui? –

+0

Merci, o.k.w - vous avez raison. Par exemple, je peux obtenir le texte affiché sur les boutons en faisant: myStrings [0] = myTableLayoutPanel.GetControlFromPosition (1, 1) .Text; Le problème avec cette approche est que je dois passer dans les coordonnées de chacun des boutons. Existe-t-il un moyen de transmettre l'objet myTablelayoutPanel lui-même en tant que paramètre à une structure de données afin de remplir cette structure avec des références aux boutons contenus dans le panneau? –

Répondre

1

En C# 3 (VS 2008), vous pouvez mettre en place un tableau de compilation en utilisant la syntaxe de tableau initialiseur:

var buttons = new [] { button1, button2, ... button10 }; 

alternativement, vous pouvez réfléchir sur tous les champs et filtrer les boutons, le long des lignes de

using System.Linq; 

// tlp being your TablelayoutPanel instance 
var buttons = tlp.GetType().GetFields().Select(f => f.GetValue(tlp)).Where(v => v is Button).ToArray(); 

Cela obtient tous les boutons - vous pouvez ajouter un filtre Where(f => SomeTestOn(f.Name)) avant le Select si vous voulez filtrer ces champs sauf avec un modèle de dénomination connu indiquant qu'ils sont les boutons que vous voulez réellement.

Questions connexes