2017-10-16 7 views
-3
for (int i=1; i<4; i++) 
{ 
    string buttonName = "button" + i; 
    if (Controls[buttonName].BackColor = Color.Red) 
    { 
     Controls[buttonName].Enabled = false; 
    } 
} 

Ce code fonctionne parfaitement. Le code vérifie 3 boutons différents (bouton1, bouton2, bouton3) et si leur couleur est rouge ils deviennent désactivés. Le nom du bouton est référencé en utilisant une chaîne:Comment référencer un nom ListBox en utilisant une chaîne dans Csharp

Controls[buttonName] 

est-il un moyen de faire référence à une ListBox en utilisant une chaîne de la même façon? À quoi les «contrôles» doivent-ils être changés?

+2

Vous utiliseriez toujours les contrôles, mais l'élément serait converti en ListBox. Vous pouvez faire comme suit: 'var myListBox = Contrôles [" ListBox1 "] comme ListBox; // maintenant vous pouvez faire quelque chose à l'objet ListBox' – user3583535

+0

Parfait. Je vous remercie! – Robri1989

+0

Est-il possible de référencer un GroupBox avec une chaîne de la même manière? – Robri1989

Répondre

0

Si vous voulez simplement aller sur tous les ListBoxes, vous pouvez également utiliser .OfType<T>()

foreach (ListBox lb in this.Controls.OfType<ListBox>()) 
{ 
    lb.Enabled = false; 
} 

... et il serait bien sûr travailler la même chose pour .OfType<Button>() sans qu'il soit nécessaire de nommer vos contrôles de manière à les énumérer.

+0

À la votre! Bien pensé – Robri1989