Oppure

Loading
23/10/15 23:35
lupetto77
Ciao a tutti volevo farvi una domanda per capire dove sbaglio.

Ho questa classe:
public class Esempio
{
   public List<string> _lista = new List<string>();

   public void File(string path)
   {
      // Faccio vari controlli....
      FileRisorse(Properties.Resources.FileNelleRisorse);
   }

   private void FileRisorse(string pathRisorse)
   {
        string[] letto = pathRisorse.Split('\n');
        foreach (string rigaLetta in letto)
        {
            _lista.Add(rigaLetta);
        }
    }
}


E nel Form1

private void TestoLabel()
     {
         Esempio leggi = new Esempio();
         label3.Text = leggi._lista[0];
         label4.Text = leggi._lista[1];
     }

     private void Form1_Load(object sender, EventArgs e)
     {
         Esempio leggi = new Esempio();
         leggi.File("Test.txt");

         TestoLabel();
     }


Non capisco perchè mi solleva un eccezione System.ArgumentOutOfRangeException sulla riga;
label3.Text = leggi._lista[0];

ma se copio il codice e lo metto nel Form1 in questo modo:

List<string> _lista = new List<string>();
    
     private void TestoLabel()
     {
         //Esempio leggi = new Esempio();
         label3.Text = _lista[0];
         label4.Text = _lista[1];
     }

     private void FileRisorse(string pathRisorse)
     {
         string[] letto = pathRisorse.Split('\n');
         foreach (string rigaLetta in letto)
         {
             _lista.Add(rigaLetta);
         }
     }

     private void Form1_Load(object sender, EventArgs e)
     {
         //Esempio leggi = new Esempio();
         FileRisorse(Properties.Resources.FileNelleRisorse);

         TestoLabel();
     }


Funziona tutto correttamente, come mai?
Ultima modifica effettuata da lupetto77 24/10/15 13:41
aaa
24/10/15 7:37
GN
Il problema è qui
private void TestoLabel()
     {
         Esempio leggi = new Esempio();
         label3.Text = leggi._lista[0];
         label4.Text = leggi._lista[1];
     }

perchè stai inizializzando una nuova istanza della classe Esempio, e stai provando a leggere dati da _lista prima di averceli caricati. Potresti risolvere dichiarando "leggi" globalmente, inizializzandolo nell'evento load e poi accedervi da TestoLabel:
//Sotto la dichiarazione della classe form1
Esempio leggi;
//eventuali altri oggetti globali e/o metodi
private void TestoLabel()
     {
         label3.Text = leggi._lista[0];
         label4.Text = leggi._lista[1];
     }
 
     private void Form1_Load(object sender, EventArgs e)
     {
         leggi = new Esempio();
         leggi.File("Test.txt");
 
         TestoLabel();
     }
aaa
24/10/15 13:48
lupetto77
Grazie GN hai perfettamente ragione era quello il problema grazie ancora :k:
aaa