Array e TextBox

domenica 21 febbraio 2010 - 12.59

mammamia Profilo | Newbie

Scusate la domanda forse banale

Ho una WinForm con 6 textbox per leggere/modificare dei dati in file TXT usando questo codice:

string[] testata = System.IO.File.ReadAllLines(@"C:\testata.txt"); if (testata[0] != null) { txtTestata0.Text = testata[0]; } if (testata[1] != null) { txtTestata1.Text = testata[1]; } if (testata[2] != null) { txtTestata2.Text = testata[2]; } if (testata[3] != null) { txtTestata3.Text = testata[3]; } if (testata[4] != null) { txtTestata4.Text = testata[4]; } if (testata[5] != null) { txtTestata5.Text = testata[5]; }

Le domande sono due:
1- Come faccio a usare un ciclo FOR che mi accorci il codice e assegni alle textbox i valori "txtTestata1", "txtTestata2" ... ecc ?
2- Come faccio a verificare che gli array esistano tutti oppure sono minori delle mie 6 textbox ? Puo capitare che nel file che leggo ci siano solo 3 righe anzichè tutte e 6 quelle che mi servono.

Grazie e scusate la mia ignoranza.
PS. Il Linguaggio è C#

aiedail92 Profilo | Expert

Ciao

Puoi usare un codice di questo genere:

// Leggo tutte le righe dal file string[] lines = File.ReadAllLines(@"C:\testata.txt"); // Leggo il numero di righe dal file; se supera 6, ne leggo solo 6 int max = lines.Length; if (max > 6) max = 6; // Ciclo sui Controls per impostare i valori for (int i = 0; i < max; i++) { Controls.Find("txtTestata" + i.ToString(), false)[0].Text = lines[i]; }

Luca

mammamia Profilo | Newbie

Intanto grazie per la velocissima risposta !

Ho provato il codice e mi ritorna l'errore:
Indice oltre i limiti della matrice.
in questa parte:
Controls.Find("txtTestata" + i.ToString(), false)[0].Text = lines[i];

Poi ti volevo chiedere, in questa parte ho visto che hai usato "[0]", ma non devo mettere il valore di "i" del ciclo for?

aiedail92 Profilo | Expert

No, lo 0 è corretto: la funzione Find ottiene un array di tutti i controlli che corrispondono al nome; generalmente ce n'è uno solo con un dato nome, quindi facendo [0] ottieni il primo elemento...

Quando al fatto che ti solleva l'eccezione, è perché non trova il controllo, restituisce un array vuoto e usando [0] dà l'errore. Le TextBox sono forse all'interno di qualche altro controllo? (Es. un GroupBox o un Panel)

Prova a vedere se mettendo “true” al posto di “false” come secondo parametro risolvi il problema:

Controls.Find("txtTestata" + i.ToString(), true)[0].Text = lines[i];

Luca

mammamia Profilo | Newbie

Si bisognava impostare TRUE

Grazie tante.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5