Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    [C#] Creare array di list<>

    Ciao a tutti,

    vi spiego cosa sto facendo:

    Sto creando un modulo di gestione di gruppi interni di una società.

    Nella listview1 ho tutto il personale che appartiene a quel gruppo. (quindi una lista di nomi)

    mentre nella listview2 memorizzo il nome del gruppo,e quindi devo fare in modo che quando clicco su un nome di un gruppo nella listview2 mi escano fuori tutto il personale sulla listview1.

    Per fare cio' stavo pensando di creare un array di List<string> ad ogni pressione di un pulsante.Tenendo anche il conto del numero di gruppi creati in modo che al caricamento del salvataggio vengano create il numero di List<string> scritto nella variabile che memorizza il numero totale dei gruppi (in questo caso la variabile si chiama: TEAMCount ed è uno static int situato in una classe pubblica.

    Ho fatto questo codice:

    Nella classe GlobalVariables dichiaro la lista come array:

    codice:
         public static List<string>[] NewTEAM;
    Questo è il codice del pulsante:

    codice:
    private void button3_Click(object sender, EventArgs e)
    
            {
    
                GlobalVariables.TEAMCount += 1;
    
                foreach (ListViewItem itm in listView2.Items)
    
                {
    
                    GlobalVariables.NewTEAM = new List<string>[GlobalVariables.TEAMCount];
    
                    GlobalVariables.NewTEAM[GlobalVariables.TEAMCount].Add(itm.Text);
    
                }
    
            }
    In poche parole ogni lista dovrà contenere le liste del personale dei vari gruppi.

    quindi, se nella listview1 ho:

    Marco
    Giuseppe
    Antonio
    Sempronio

    dovrò creare una nuova lista che contenga queste stringhe... e di conseguenza riaprirla con un altra funzione..

    l'errore che mi da il codice è che l'index va fuori l'array...

    codice:
    Index was outside the bounds of the array.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Il codice che hai scritto non ha senso: in primo luogo, sembra istanziare la lista ad ogni iterazione del ciclo; in secondo luogo, il messaggio dell'errore è abbastanza indicativo: se allochi una lista di N elementi, potrai accedere con gli indici da 0 (zero) a N-1, mentre tu accedi con l'indice N, che è ovviamente fuori dalla lista.

    P.S.: per semplificare, esiste già un tipo del Framework che assomiglia alla lista che vuoi utilizzare tu: StringCollection.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Ciao,

    Alla fine ho risolto in un modo piu' comodo e piu' semplice. All'apertura del salvataggio carico tutti i gruppi sotto le seguenti formattazioni in una List<string>:

    [TEAMALFA]
    DNAME=Peppe
    DNAME=Ciccio
    DNAME=Antonio
    [END]

    e dopo con questo codice in base al testo del controllo scelto cerca il team e se incontra l'END smette di leggere.

    codice:
                   private void LoadTeam(ListView lst,List<string> ListS,Control ctrl)
    
            {
    
                string Name = "null";
                Boolean DoOrNot = true;
    
                    if (DoOrNot == true) {
    
                        foreach (string s in ListS)
    
                        {
    
                            string line = s;
    
                            string[] ArrayNameSplit = line.Split('[', ']', '='); 
    
                            if (ArrayNameSplit[0] == "" && ArrayNameSplit[1] == ctrl.Text)
    
                            {
    
                                ctrl.Text = ArrayNameSplit[1];
                                Name = ArrayNameSplit[1];
    
                            }
    
                            else
    
                            {
    
                                if (Name == ctrl.Text && ArrayNameSplit[0] == "DNAME" && DoOrNot == true)
    
                                {
    
                                    lst.Items.Add(ArrayNameSplit[1]);
    
    
                                }
    
                                if (Name == ctrl.Text && ArrayNameSplit[0] == "" && ArrayNameSplit[1] == "END")
                                {
    
                                    DoOrNot = false;
    
                                }
    
                            }
                        
                        }
                
                    }  
         
            }

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da GhostFire
    Alla fine ho risolto in un modo piu' comodo e piu' semplice.
    Sono felice per te, anche se 1) è il codice più "caotico" che io abbia mai visto e spero che nessun altro oltre a te debba mai interpretarlo, 2) è completamente diverso dal precedente e non ha nulla a che vedere con quell'errore, 3) ancora non è per nulla chiaro quale sia il tuo intento, o comunque non esiste un percorso sensato in questa discussione che possa portare da un problema generale alla soluzione corrispondente.

    Comunque, se hai già risolto, tanto meglio.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.