19/08/12 7:01
ggaamm
Ciao a tutti.
Passo subito al mio quesito.
Ambiente: VB.NET 2010
Ho 6 Textbox (textbox1, textbox2, ect...)
Ho un button che mi permette di salvare i dati che l'utente deve inserire nelle textbox.
Per evitare di scrivere lunghi pezzi di codice ho la necessità di creare un ciclo For To Next all'interno del quale deve gestire ogni singolo dato contenuto nelle caselle e scrivere lo stesso un un file txt.
In pratica l'utente inserisce in ogni casella un numero e il ciclo deve leggere i numeri e scriverli nel file.
Ho iniziato da poco e la confusione è massima, probabilmente quello che chiedo non si puo' fare in quanto il VBNET non consente di utilizzare l'indice delle textbox ed allora dovrebbe tornare utile la gestione degli eventi, gestione che ancora non conosco per niente.
Restando in attesa VI saluto cordialmente.
aaa
20/08/12 14:52
Dedalux
Ciao. Potresti fare un For Each txt As TextBox in NomeDelTuoForm
e per ogni TextBox che trova accodare in una stringa il testo per poi salvarlo.
Ma fa abbastanza schifo come soluzione, per non avresti controllo sull'ordine seguito per leggere dalle TextBox.
Di solito in questi scenari, ogni controllo è adibito all'input di una determinata informazione, per esempio txtNome, txtCognome, txtIndirizzo.
Quindi avrai sicuramente un numero ragionevole di controlli da cui prendere i dati uno per uno, e gestire questi dati singolarmente.
aaa
20/08/12 17:25
ggaamm
Grazie Dedalux, la Tua soluzione potrebbe andar bene, perchè dici che fa schifo, io avevo pensato in una for to next, ma a quanto pare non si può più utilizzare in quanto nel vbnet 2010 ai controlli manca l'indice.
Il problema dell'ordine si risolve imponendo ad ogni textbox il focus alla casella ssiva.
Potresti farmi un esempio del for each di cui parlavi ?
Aggiungo che avevo pensato ad un array in fase di raccolta dei dati, visto che ho 6 caselle avevo pensato ad un array 2x3 che mi salvasse poi le informazione su un file txt.
Grazie anticipatamente.
Saluti Antonio
aaa
24/08/12 0:41
Dedalux
Quello che intendevo io era una cosa di questo tipo, se stai usando WinForms
For Each txt As TextBox In Me.Controls
'quello che devi fare
Next
però occhio, perchè non è come pensi tu: l'ordine con cui vengono ottenuti i controlli è quello con cui vengono creati a runtime, non quello definito dal tabindex.
Quindi per gestire l'ordine devi editare il file designer del form.
Ultima modifica effettuata da Dedalux 24/08/12 0:42
aaa
04/09/12 16:26
ggaamm
Un saluto a tutti.
Per Dedalux:
certo è il tabindex che decide il passaggio alla casella successiva, però io avevo scritto un codice che comunque mi permetteva di avere ad ogni invio il passaggio alla casella successiva, vedi codice:
____________________________________________________________________________________
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim KeyAscii As Short = Asc(e.KeyChar)
If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then ' condizione che non permette l'inserimento di numeri decimali e caratteri di controllo
e.Handled = True ' tutto il resto è vero, l'argomento "e" è vero
End If
If KeyAscii < 48 And KeyAscii <> 24 And KeyAscii <> 8 Then ' condizione che non permette l'inserimento di caratteri se non numeri che vanno dallo zero al nove
KeyAscii = 0
ElseIf KeyAscii > 57 Then
KeyAscii = 0
End If
If (e.KeyChar = Chr(13)) Then ' condizione che permette di accettare l'invio dopo la digitazione del numero
e.Handled = True
TextBox2.Focus()
End If
' permette di passare il focus alla textbox successiva
End Sub
_________________________________________________________________________________
Per Lupino:
Io non ho una grande esperienza in quanto sto iniziando adesso a programmare, pertanto Vogliate perdonarmi nell'ipotesi in cui dica fesserie. Allora,
Dim myTxtArray as textbox() ' creo un array di tipo textbox () senza alcuna dimensione
myTxtArray = new textbox(6){txt1,txt2,txt3....} ' posizione all'interno della variabile che ho appena creato 6 nuovi oggetti a runtime e poi tra parentesi graffe inserisco ogni singola textbox.
________________________________________________________________________________
Il mio progetto sperimentale prevede una form con delle textbox create nella form stessa, un button per salvare i contenuti delle textbox, per intenderci volevo creare una semplice registrazione di numeri del lotto, quindi una griglia formata da 5 (numeri) x 11 ruote; il mio progetto era solo su 6 caselle (3 numeri x 2 ruote) al fine di effettuare le prove.
Quindi nelle textbox inserisco i numeri, col tasto invio passo da una casella all'altra e poi per ultimo con il tasto salva vado a registrare in un file con estensione .txt tutta quanta l'estrazione.
Nel button volevo fare in modo che richiamando un array mi faceva con un semplice ciclo for to next (all'interno del quale ponevo la registrazione dei dati) tutto quanto in automatico.
es. di prova
1a ruota 12 23 43
2a ruota 34 22 11
Grazie per il Vs. aiuto, un po di pazienza.
Saluti Antonio.
Ultima modifica effettuata da ggaamm 04/09/12 17:46
aaa
06/09/12 17:26
ggaamm
Grazie Lupino, sei stato molto gentile e premuroso nel darmi supporto.
1) Sono molto appassionato di lotto ed allora avevo pensato di farmi un programma per conto mio ed allora avendo fatto in passato (ai tempi del commodore 64) un po di basic allora ho pensato di studiare la nuova versione di visual basic, quindi programmazione ad oggetti, tutta un'altra cosa rispetto alla vecchia concezione del basic e del gwbasic;
Mi hanno detto che utilizzare gli archivi txt è molto più agevole, anche se Ti devo dire che anche a me mi sembra strano. comunque il mio programma a parte l'archivio delle estrazioni dovrebbe effettuare dei calcoli tra le diverse estrazioni e creare apposite griglie visualizzate in una form.
2) Dim Estrazioni As TextBox() = New TextBox(54) {txtR1_0, txtR1_1, . . . txtR11_4} = vuol dire:
' Dichiaro una variabile di tipo textbox senza indicare alcuna dimensione;
Potevamo indicare già la dimensione ?
' = New TexBox(54) indica una nuova matrice costituita da 54 elementi e vengono indicati tutti quanti.
perchè si devono indicare tutti ?
3) for indx as int16=0 to 54
AddHandler Estrazioni(indx).KeyPress, AddressOf Filtro_Tasti
next
' Avvio un ciclo con variabile indx di tipo a 16 bit (possiamo anche indicare byte ? giusto ?) da 0 a 54
' AddHandler ha a che fare con gli eventi che non ho capito molto bene, mi spieghi il rigo ?
4) Capisco la Sub Filtro_Tasti che viene richiamata dal AddressOf ma non AddHandler
5) Non capisco Addhandler Estrazioni(indx).Keypress
6) Dim KeyAscii As Integer = Asc(e.KeyChar)
Dim indxTxt As Integer = Array.IndexOf(Estrazioni, DirectCast(sender, TextBox)) 'Recupera l'indice del textbox evidenziato
' mi speghi queste due righe di codice ?
Forse Ti ho chiesto tanto, Ti ringrazio anticipatamente.
Saluti Antonio
aaa