2009-04-09 5 views
0

Jusqu'à présent, je l'ai trouvé 2 façons de supprimer les éléments sélectionnés à partir d'une zone de liste (Winform):les différentes manières de supprimer des éléments choisis parmi System.Windows.Forms.ListBox

1.

ListBox.SelectedObjectCollection tempCollection = new ListBox.SelectedObjectCollection(myListBox); 
for (int i = tempCollection.Count - 1; i >= 0; i--) 
{ 
    myListBox.Items.Remove(tempCollection[i]); 
} 

2.

while (myListBox.SelectedItems.Count > 0) 
{ 
    myListBox.Items.Remove(myListBox.SelectedItem); 
    // or 
    //myListBox.Items.Remove(myListBox.SelectedItems[0]); 
} 

La 2ème voie est facile à comprendre, mais la 1ère est étrange pour moi. Ils travaillent tous les deux pour moi, je veux juste savoir la différence?

Répondre

0

La première façon s'écrit vraiment étrangement. Cela a l'air étrange parce que ça va en arrière. Ceci afin de ne pas perturber la collecte des éléments sélectionnés. La collection d'éléments sélectionnés n'est pas entièrement créée, c'est une collection Enumerable, et les éléments ne s'en détachent que lorsque vous les demandez. Vous ne pouvez pas utiliser foreach, car la collection d'éléments sélectionnés ne cesse de changer lorsque vous supprimez des éléments.

En fait, je préfère la deuxième façon. En outre, tout ce qui se lit plus facilement est plus facile à maintenir. Le premier lit: obtenir les éléments sélectionnés, les parcourir à rebours, en supprimant chacun de la liste.

La seconde lit: s'il existe des éléments sélectionnés, supprimez le premier élément sélectionné disponible.

Beaucoup mieux la deuxième façon.

Questions connexes