2010-07-08 4 views
1

J'ai une zone de liste qui contient, disons, 6 valeurs. En utilisant les boutons, il est possible d'insérer de nouveaux éléments dans la liste. Je peux déplacer tous ces éléments de haut en bas en utilisant d'autres boutons que j'ai ajoutés. Dans le but de comprendre, nous appellerons les «groupes» nouvellement créés (que je veux faire en tant que groupes/diviseurs). Ce que je veux accomplir est d'avoir les éléments entre les groupes stockés. Par exemple à travers un SortedDictionary<int itemIndex, string group>. Un exemple (notez que le nombre entre crochets est l'indice):Comment diviser une liste en groupes et stocker les indices?

Group 1 [0] 
Item 1 [1] 
Item 2 [2] 
Item 3 [3] 
Group 2 [4] 
Item 4 [5] 
Item 5 [6] 
Group 3 [7] 
Item 6 [8] 

Le dictionnaire pourrait ressembler à ceci:

1, "group 1" 
2, "group 1" 
3, "group 1" 
5, "group 2" 
6, "group 2" 
8, "group 3" 

Lorsque le premier numéro est un indice d'élément dans la zone de liste et le second (string) est le groupe dans lequel il se trouve. Donc, ma question est: comment est-ce que je boucle la liste de manière à ce que je puisse vérifier quels éléments relèvent de quel groupe? S'il y a une façon plus simple de le faire (en utilisant un contrôle différent d'une boîte de liste), je suis heureux de l'essayer aussi.

Répondre

0

J'ai réussi à le résoudre moi-même et voici comment:

 // Create string to save last 'used' group in. 
     string lastGroup = string.Empty; 

     // Create counter to check what index we are at in the ListBox. 
     int i = 0; 

     // Create a dictionary to store <string Item, string Group>. 
     Dictionary<string, string> dictionary = new Dictionary<string, string>(); 

     // Loop every item (as string) in the ListBox. 
     foreach (string o in lbxMain.Items) 
     { 
      // If the item is a group: 
      if (o.StartsWith("Group:")) 
       // Put the name of the item into the lastGroup variable so we know where to put the items in. 
       lastGroup = lbxMain.Items[i].ToString(); 

      // If the item is an item: 
      if (o.StartsWith("Item:")) 
       // Put the item into a dictionary with the lastGroup variable saying what group it's part of. 
       dictionary .Add(o + " " + i, lastGroup); 

      // Increase i so we keep an eye on the indices. 
      i++; 
     } 

Et si vous voulez juste le code:

 string lastGroup = string.Empty; 
     int i = 0; 
     Dictionary<string, string> dictionary = new Dictionary<string, string>(); 

     foreach (string o in lbxMain.Items) 
     { 
      if (o.StartsWith("Group:")) 
       lastGroup = lbxMain.Items[i].ToString(); 
      if (o.StartsWith("Item:")) 
       dictionary.Add(o + " " + i, lastGroup); 
      i++; 
     } 
1

Si vous voulez dire WinForms, ListView a .Groups (chacun ListViewGroup) intégré, avec chaque ListViewItem ayant un .Group. Cela devrait rendre ce dont vous avez besoin facile dans le code, et visuellement intuitif pour l'utilisateur.

Notez que les groupes ne sont affichés que lorsque le .View est View.Details, .ShowGroups est true, et le style visuel est activé (Application.EnableVisualStyles(), habituellement dans Main()).

+0

Merci pour votre réponse. Cela rendrait certainement le rendre plus facile, mais je voudrais coller à la même mise en page qu'une liste. Y at-il un moyen de faire ressembler 'ListView' comme un? – Fusyion

Questions connexes