2010-08-26 6 views
3

Comment représenter un seul élément dans une zone de liste dans une instruction foreach?WinForm: représente un seul élément ListBox dans une instruction foreach

J'ai essayé ListBoxItem mais System.Windows.Controls n'est pas considéré comme un espace de noms valide dans mon framework .Net (version 4).

foreach(ListBoxItem item in listBoxObject.Items) 
{ 
    ... 
} 
+1

Pour Winforms, utilisez des classes dans l'espace de noms 'System.Windows.Forms'. Vous pouvez trouver utile si vous supprimez toutes les instructions utilisant 'System.Windows.Controls' dans votre projet. – kbrimington

+0

Je n'ai pas accès à .NET 4 pour le moment, mais je pense que vous pourriez utiliser l'extension .Cast() sur .Items pour lancer une liste si vous pouvez guarter que tous les objets sont du même type T –

Répondre

1

Généralement, lorsque quelqu'un parcourt des éléments de la liste, il cherche à déterminer s'ils sont sélectionnés ou non. Si c'est le cas, essayez d'utiliser listBoxObject.SelectedItems au lieu de listBoxObject.Items. Cela ne renverra que les éléments sélectionnés.

Pour autant que je sache, il n'y a pas d'objet ListBoxItem. Vous devrez utiliser l'objet pour chaque élément (qui est ce que seletecteditems et items renvoie). L'objet représente la valeur de l'élément, donc utilisez-le en conséquence (ce qui signifie que si l'objet est une chaîne, utilisez-le comme une chaîne, mais si un objet est un objet complexe, utilisez-le comme tel).

Exemple de code:

foreach (Object listBoxItem in listBoxObject.SelectedItems) 
{ 
    //Use as object or cast to a more specific type of object. 
} 

Et si vous savez quel objet sera toujours vous pouvez le jeter dans la boucle foreach. (Attention: Si vous vous trompez, une exception sera émise). Cet exemple est si seules les chaînes sont entrées dans la liste.

foreach (String listBoxItem in listBoxObject.SelectedItems) 
{ 
    //Use as String. It has already been cast. 
} 
+0

Merci! J'avais surtout besoin de savoir qu'il n'y avait pas de type d'objet pour les éléments de la liste! Semble stupide que vous pouvez avoir une collection d'entre eux, mais pas une seule entité. – Jesslyn

1

foreach(Object item in listBoxObject.Items){ ... }

http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.objectcollection.item.aspx

ListBox.Items est de type System.Windows.Forms.ListBox.ObjectCollection System.Windows.Forms.ListBox.ObjectCollection.Item est de type objet. HTH.

+0

Mon problème avec l'utilisation du type d'objet est que je veux interagir avec "item" comme un élément de la liste. Le code suivant ne fonctionnera pas à moins que je fasse "item" être reconnu comme un élément de zone de liste. Extrait de code: foreach (Objet dans listBoxObject.Items) {if (item.Selected) listBoxObject2.Add (item.Value); } – Jesslyn

1

Vous constaterez que listBoxObject.Items est une collection d'objets contenant vos objets de données plutôt que des contrôles.

Par exemple, si je lie la liste comme ceci:

listBox1.DataSource = new string[] { "asdf", "qwerty" }; 

Ensuite, la propriété .Items donne un ObjectCollection contenant deux chaînes.

Questions connexes