2010-06-24 11 views
2

Je voudrais parcourir une zone de liste cochée et voir quelles valeurs sont renvoyées. Pas de problème, je sais que je peux le faire avec:Comment faire une boucle dans la zone de liste cochée que vous avez accédée via les contrôles de Windows?

if(myCheckedListBox.CheckedItems.Count != 0) 
{ 
    string s = ""; 
    for(int i = 0; i <= myCheckedListBox.CheckedItems.Count - 1 ; i++) 
    { 
     s = s + "Checked Item " + (i+1).ToString() + " = " + myCheckedListBox.CheckedItems[i].ToString() + "\n"; 
    } 
    MessageBox.Show(s); 
} 

Le problème est quand je veux accéder à la zone de liste vérifiée après avoir généré à l'aide d'un code. Je passe en revue chaque contrôle dans une table (sur un formulaire) et quand le contrôle est une zone de liste vérifiée, j'en ai besoin pour utiliser le code que j'ai écrit ci-dessus (ou similaire). Voilà comment je suis en boucle à travers les contrôles:

foreach (Control c in table.Controls) 
    { 
     if (c is TextBox) 
     { 
      // Do things, that works 
     } 
     else if (c is CheckedListBox) 
     { 
      // Run the code I've written above 
     } 

Le problème est que, lorsque je tente d'accéder à la commande comme ceci: if (c.CheckedItems.Count != 0), il ne trouve même pas la propriété CheckedItems pour Control c. Y a-t-il une autre façon d'accéder à cette propriété du contrôle que j'ai choisi et est-ce que je la regarde mal? Merci d'avance.

Cordialement,

Répondre

3

Vous devez jeter c comme CheckedListBox:

((CheckedListBox)c).CheckedItems; 

Ou, vous pouvez faire ce qui suit si vous souhaitez conserver une référence au type correct:

CheckedListBox box = c as CheckedListBox; 
int count = box.CheckItems.Count; 
box.ClearSelected(); 

Si vous avez utilisé le premier exemple, ce serait comme ceci:

int count = ((CheckedListBox)c).Count; 
((CheckedListBox)c).ClearSelected(); 

Il est donc évident que le deuxième exemple est préférable lorsque vous avez besoin de plusieurs opérations sur un contrôle de distribution.

MISE À JOUR:

foreach (Control c in table.Controls) 
    { 
     if (c is TextBox) 
     { 
     // Do things, that works 
     } 
     else if (c is CheckedListBox) 
     { 
     CheckedListBox box = (CheckedListBox)c; 
     // Do something with box 
     } 
    } 
+0

Merci pour votre réponse, mais où dois-je mettre cela? – Fusyion

+0

@Kevin - mis à jour. – GenericTypeTea

+0

Cette deuxième fonctionne effectivement, mais je ne sais pas comment et où utiliser le premier. Néanmoins, cela fonctionne. Je vous remercie! – Fusyion