Domanda

Ho una casella di riepilogo che tiene, diciamo, 6 valori.Utilizzo dei pulsanti È possibile inserire nuovi elementi nella casella di riepilogo.Posso spostare tutti questi elementi su e giù usando altri pulsanti che ho aggiunto.Allo scopo di comprensione chiameremo gli elementi appena creati (che voglio agire come gruppi / divisori) "Gruppi".Quello che voglio realizzare è avere gli oggetti tra i gruppi memorizzati.Ad esempio tramite un SortedDictionary<int itemIndex, string group>.Un esempio (nota che il numero di bracketed è l'indice):

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]
.

Il dizionario potrebbe assomigliare a questo:

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

Dove il primo numero è un indice dell'articolo nella casella di riepilogo e il secondo (stringa) è il gruppo in cui cade.

Quindi la mia domanda è: come faccio a cercare la casella di riepilogo in modo tale che posso verificare quali articoli rientrano in quale gruppo?Se c'è un modo più semplice per farlo (usando un controllo diverso da una casella di riepilogo) Sono felice di provare anche questo.

È stato utile?

Soluzione 2

Sono riuscito a risolverlo da solo ed è così:

        // 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++;
        }
.

E se vuoi solo il codice:

        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++;
        }
.

Altri suggerimenti

Se si intende WinForms, ListView ha .Groups (ciascuno di ListViewGroup) integrato, con ogni ListViewItem con .Group.Questo dovrebbe rendere ciò di cui hai bisogno facile nel codice e visivamente intuitivo per l'utente.

Nota che i gruppi vengono visualizzati solo quando il .View è View.Details, .ShowGroups è true, e lo styling visivo è abilitato (Application.EnableVisualStyles(), di solito in Main()).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top