View Full Version : Ciclo FOR Problema Variabile con VB .NET
mrjohnny
25-01-2006, 00:14
Sale a tutti,
su un form devo valorizzare (riempire)
diverse TextBox, mah ho un problema in merito..
Visual Basic .NET
ecco il codice :
Dim esegui As String
Dim i As Integer
For i = 1 To 4
esegui = "TextBox" & i & ".Text = ciao"
esegui()
Next
nota:
le TextBox sono diverse, TextBox1, TextBox2, TextBox3, TextBox4, ecc..
intendo riempirle con un ciclo for,
il problema è che :
esegui() da errore e non esegue il contenuto in esso.(non so se mi spiego)..
ipotizzo che il problema sia nel fatto che
la variabile esegui forse non deve essere di tipo As String.
Va bene anche una soluzione alternativa alla variabile esegui()..
in definitiva come valorizzo diverse TexBox con un numero progressivo utilizzando un ciclo FOR????
By MrJohnny.
hai provato con un array di oggetti?
Fenomeno85
25-01-2006, 10:29
Sale a tutti,
su un form devo valorizzare (riempire)
diverse TextBox, mah ho un problema in merito..
Visual Basic .NET
ecco il codice :
Dim esegui As String
Dim i As Integer
For i = 1 To 4
esegui = "TextBox" & i & ".Text = ciao"
esegui()
Next
nota:
le TextBox sono diverse, TextBox1, TextBox2, TextBox3, TextBox4, ecc..
intendo riempirle con un ciclo for,
il problema è che :
esegui() da errore e non esegue il contenuto in esso.(non so se mi spiego)..
ipotizzo che il problema sia nel fatto che
la variabile esegui forse non deve essere di tipo As String.
Va bene anche una soluzione alternativa alla variabile esegui()..
in definitiva come valorizzo diverse TexBox con un numero progressivo utilizzando un ciclo FOR????
By MrJohnny.
secondo me semplicemente perchè non si può fare una cosa del genere "".
dato che lui vuole un oggetto e non una stringa.
Hai due metodi:
o te li fai tutti separati oppure come ti hanno consigliato si fanno gli array di oggetti e dopo accedi con TextBox[i].text
~§~ Sempre E Solo Lei ~§~
Crashbandy80
25-01-2006, 10:46
Se non ho capito male la tua richiesta, potresti anche scorrere tra tutti i controlli nel tuo contenitore..
Un qualcosa tipo
For Each ctr As Control In Page.Controls
If TypeOf ctr Is TextBox Then
ctr.Text = "ciao"
End If
Next
No?
mrjohnny
26-01-2006, 00:07
Se non ho capito male la tua richiesta, potresti anche scorrere tra tutti i controlli nel tuo contenitore..
Un qualcosa tipo
For Each ctr As Control In Page.Controls
If TypeOf ctr Is TextBox Then
ctr.Text = "ciao"
End If
Next
No?
dunque.. dice che: Page non è dichiarato.. e da errore..
Faccio un'altro esempio per meglio spiegarmi su cosa puo' essere utile questa cosa..
dunque:
Public sound1 As New gscore10.audio
Public sound2 As New gscore10.audio
Public sound3 As New gscore10.audio
Public sound4 As New gscore10.audio
Public sound5 As New gscore10.audio
Public sound6 As New gscore10.audio
Public sound7 As New gscore10.audio
Public sound8 As New gscore10.audio
' questo è un player per la riproduzione contemporanea di piu' files audio, ed utilizza una libreria gscore10, 'sopra dichiarata
adesso potrei aver di bisogno di un ciclo For per porre in
STOP o in Play questi Sound sopra dichiarati..
scrivo un esempio:
Dim i As Integer
For i = 1 To 8
sound & i &.audioPlay()
Next
mah da errore... :muro:
Stesso problema delle TextBox, dice che sound (senza il numero) non è dichiarato e quindi non esiste.
Spero di non aver generato delle confusioni con questo nuovo esempio..
La soluzione che cerco e':
come valorizzare o impostare oggetti dichiarati con un numero progressivo sfruttando una variabile numerica di un ciclo FOR.
per Fenomeno85:
Dim i As Integer
For i = 1 To 4
TextBox[i].text = ciao
next
si va bene, mah la sintassi o il codice funzionante quale sarebbe??
perche' cosi: TextBox[i].text = ciao
non l'accetta!
Se
è possibile un esempio funzionante !!
Io continuo a vedere come possibile soluzione una cosa di questo tipo:
Dim esegui As BhoMistero
Dim i As Integer
For i = 1 To 4
esegui = "sound" & i & ".audioPlay()"
esegui()
Next
Mah chiaramente a me interessa una soluzione funzionate e non ipotesi probabili..
By MrJohnny.
Mah chiaramente a me interessa una soluzione funzionate e non ipotesi probabili..
:rolleyes:
fenomeno ti ha proposto una possibile soluzione (che ovviamente sta a te adattare alle tue eigenze) (...e per inciso non assurda come la tua) non mi sembra il caso usare questo tono!
se fossi in te mi affretterei a porre le mie scuse!
vuoi la pappa pronta?
...e, secondo lo spunto di Crashbandy80, eccoti la pappa pronta:
Public Sub popolaTextBox()
For Each ctrl As Windows.Forms.Control In Me.Controls
If ctrl.GetType.ToString = TextBox1.GetType.ToString Then
ctrl.Text = "ciao"
End If
Next
End Sub
(non ci voleva molto per fare funzionare il codice che aveva proposto: bastava cambiare page in Me)
ma toglimi una curiosità, arrivi dalla programmazione web?
perchè io na roba del genere:
esegui = "sound" & i & ".audioPlay()"
esegui()
penso possa nascere solo da tanta tanta tanta confusione con response.write e <%= %> di asp, document.writeln di javascript et simila...
'notte
mrjohnny
26-01-2006, 11:41
:rolleyes:
fenomeno ti ha proposto una possibile soluzione (che ovviamente sta a te adattare alle tue eigenze) (...e per inciso non assurda come la tua) non mi sembra il caso usare questo tono!
se fossi in te mi affretterei a porre le mie scuse!
vuoi la pappa pronta?
...e, secondo lo spunto di Crashbandy80, eccoti la pappa pronta:
Public Sub popolaTextBox()
For Each ctrl As Windows.Forms.Control In Me.Controls
If ctrl.GetType.ToString = TextBox1.GetType.ToString Then
ctrl.Text = "ciao"
End If
Next
End Sub
(non ci voleva molto per fare funzionare il codice che aveva proposto: bastava cambiare page in Me)
ma toglimi una curiosità, arrivi dalla programmazione web?
perchè io na roba del genere:
esegui = "sound" & i & ".audioPlay()"
esegui()
penso possa nascere solo da tanta tanta tanta confusione con response.write e <%= %> di asp, document.writeln di javascript et simila...
'notte
Salve, mi dispiace che si fraintende il mio tono..
sono semplicemente un po' ruvido di carattere..
non c'e' intenzione d'offendere nessuno.. (specialmente senza motivo!) anzi con questo scritto si vuole appunto chiarire questo aspetto !!
la pappa funziona perfettamente, e si ringraziano coloro che l'hanno pensata e perfezionata.. e resa disponibile e pronta all'uso a chiunque visita hwupgrade, non e' una questione di pappa pronta, ma se si riesce a fornire un codice funzionante, è una cosa brutta?
Forse mi sbaglio mah io ipotizzo che sia possibile inserire dentro una variabile una stringa di comando, e poi mandarla in esecuzione da dentro la variabile, o oggetto creato.. il problema che tipo di variabile deve essere o come creare l'oggetto, che esegue quello che si desidera..
la mia strada (per alcuni assurda) della variabile esegui(), sopra citata..
è partorita dal fatto che non riesco ad adattare :
for i = 1 to 4
TextBox[i].text = ciao
next
l'utilizzo della variabile "i" è interessante e utile per valorizzare degli oggetti con un numero progressivo solo pari.. o solo fino ad un certo valore, esempio:
sound & i &.audioPlay()
che hanno un valore pari, ed
sound & i &.audioStop()
che hanno un valore dispari..
Si mah?? la domanda è: come si adatta la variabile: "i" per questo tipo di oggetti?
sound & i &.audioPlay() ???
TextBox[i].text = ciao ???
Si ringraziano tutti coloro che vogliono partecipare, con il loro sapere, senza accende polemiche sterili..
By MrJohnny.
Crashbandy80
26-01-2006, 12:59
Non ho ben capito cosa vuoi fare..
E comunque, ammesso che sia possibile "costruire" il nome della variabile a cui assignare un valore tramite un ciclo (in javascript per esempio era fattibile), non penso sia il modo migliore di lavorare ;) .
Tu con il codice riportato da 0rph3n, vai a scorrere tra tutti i controlli di tipo "textbox" che hai nel tuo contenitore (io avevo messo Page, ma poteva essere un form, un pannello, ...), e quindi ti da la possibilita' di poter effettuare determinate operazioni per ciascun oggetto.
Public Sub popolaTextBox()
For Each ctrl As Windows.Forms.Control In Me.Controls
If ctrl.GetType.ToString = TextBox1.GetType.ToString Then
<Qui dentro puoi effettuare i controlli che ti interessano,
quindi dirgli di assegnare un determinato valore se il tuo "i"
(che sarebbe equivalente al nome del textbox, proprieta' del
controllo) e' pari o dispari, o qualsiasi altra cosa tu voglia fare.. >
End If
Next
End Sub
mrjohnny
26-01-2006, 15:46
Crashbandy80 Scrive:Non ho ben capito cosa vuoi fare..
-------------
Mi spiego meglio..
sound1.audioPlay()
devo sostituire il numero 1 con la variabile "i"
quindi:
sound & i &.audioPlay()
mah non l'accetta! :muro: :muro: :muro:
-----------------------
Public Sub popolaTextBox()
For Each ctrl As Windows.Forms.Control In Me.Controls
If ctrl.GetType.ToString = TextBox1.GetType.ToString Then
<Qui dentro puoi effettuare i controlli che ti interessano,
quindi dirgli di assegnare un determinato valore se il tuo "i"
(che sarebbe equivalente al nome del textbox, proprieta' del
controllo) e' pari o dispari, o qualsiasi altra cosa tu voglia fare.. >
End If
Next
End Sub
[/QUOTE]
Ok graz.. devo fare delle prove.. e poi vi scrivo i risultati ottenuti..
Una cosa non ho ben chiara.. (adesso sono di premura per fare le prove.. del caso..)
mah se io voglio escludere delle TextBox lo posso fare con questo sistema??
anche se è questa una possibile soluzione valida..
io vorrei poter utilizzare :
sound & i &.audioPlay()
TextBox[i].text = ciao
inserendo la "i" al posto del numero.. mah per il momento non riesco a farglio accettare..
scappo..
By MrJohnny.
Crashbandy80
26-01-2006, 17:50
Si con il metodo esposto da noi puoi escludere i textbox in base a qualsiasi criterio tu voglia inserendo delle condizioni.
Il metodo che vuoi utilizzare tu non penso sia fattibile, o almeno io non sono in grado di aiutarti mi spiace.
mrjohnny
26-01-2006, 19:33
Si con il metodo esposto da noi puoi escludere i textbox in base a qualsiasi criterio tu voglia inserendo delle condizioni.
Il metodo che vuoi utilizzare tu non penso sia fattibile, o almeno io non sono in grado di aiutarti mi spiace.
Ottimo, ho ottenuto dei risultati soddisfacenti..
scrivo per documentare il forum uno tra i vari test da me effettuati:
For Each ctrl As Windows.Forms.Control In Me.Controls
If ctrl.GetType.ToString = Label1.GetType.ToString Then
If ctrl.Name = "Label" & i Then
ctrl.Text = "Ok"
End If
End If
Next
il sistema funziona e va bene, c'e' da notare che ogni volta
che desidero aggiornare una label sfruttando la variabile "i" il ciclo for ricontrolla tutti gli oggetti, e quindi si generano dei cicli inutili in +..
inquanto io già conosco il nome della label che è questo: "Label" & i
e non ho bisogno di controllarli tutti..
Cmq l'importante che cosi'..funziona!! graz.
-------------
questo sistema (o equivalente) si puo'
sfruttare con :
Public sound1 As New gscore10.audio
Public sound2 As New gscore10.audio
Public sound3 As New gscore10.audio
Public sound4 As New gscore10.audio
Public sound5 As New gscore10.audio
For i = 1 to 3
sound(i).audioPlay()
next
????
voglio mettere in Play, solo: sound1, sound2, sound3
By MrJohnny.
Fenomeno85
27-01-2006, 10:09
for i = 1 to 4
TextBox[i].text = ciao
next
l'utilizzo della variabile "i" è interessante e utile per valorizzare degli oggetti con un numero progressivo solo pari.. o solo fino ad un certo valore, esempio:
stendendo un velo pietoso sul fatto che uno deve avere la pappa pronta subito ... che gusto c'è a programmare se tutto è già fatto da altri?! è solo una noia mostruosa ... poi passando a cose serie .. che significa sta frase che hai messo? solo un numero progressivo pari?! :mbe:
1 3 del ciclo per te sono pari?! :wtf:
l'indice funziona SOLO se hai creato un array di oggetti.
~§~ Sempre E Solo Lei ~§~
mrjohnny
27-01-2006, 11:31
che gusto c'è a programmare se tutto è già fatto da altri?! ..
Non penso che mi stai facendo tu i programmi..
nei libri scrivono esempi funzionanti, e non parlano di pappa!
che significa sta frase che hai messo? solo un numero progressivo pari?! :mbe:
1 3 del ciclo per te sono pari?! :wtf:
allora si potrebbe fare cosi':
Dim i As Integer
For i = 1 To 4
If i Mod 2 = 0 Then
TextBox[i].text = "ciao"
End If
Next
con l'esempio scritto sopra, valorizza solo le text pari, escludendo le dispari.. (pero' la varibile "i" cosi' inserita non l'accetta) ..
Mah lascia perdere il discorso pari o dispari, visto che ti genera confusione...
-----------
l'indice funziona SOLO se hai creato un array di oggetti.
Spiegati meglio.. come si deve fare questa array per l'oggetto sound
Public sound1 As New gscore10.audio
Public sound2 As New gscore10.audio
Public sound3 As New gscore10.audio
Public sound4 As New gscore10.audio
Public sound5 As New gscore10.audio
For i = 1 to 3
sound(i).audioPlay()
next
????
Metti in Play, solo: sound1, sound2, sound3
sto valutando come sfruttare il suggerimento di: Crashbandy80, mah in questo caso non mi riesce..
By MrJohnny.
Crashbandy80
27-01-2006, 12:48
Spiegati meglio.. come si deve fare questa array per l'oggetto sound
Public sound1 As New gscore10.audio
Public sound2 As New gscore10.audio
Public sound3 As New gscore10.audio
Public sound4 As New gscore10.audio
Public sound5 As New gscore10.audio
For i = 1 to 3
sound(i).audioPlay()
next
????
Metti in Play, solo: sound1, sound2, sound3
sto valutando come sfruttare il suggerimento di: Crashbandy80, mah in questo caso non mi riesce..
By MrJohnny.
Allora.. puoi creare un array di oggetti di tipo gscore10.audio con
Public sound(5) As gscore10.audio
Ora hai un array chiamato 'sound' di oggetti che ti interessano.
Ora non ricordo precisamente, ma non mi pare sia possibile utilizzare il costrutto New nella dichiarazione di un array, quindi devi inizializzarli in seguito prima dell'uso.
Ora ci puoi accedere come hai scritto tu :
For i As Integer = 0 to 2
sound(i) = New gscore10.audio
sound(i).audioPlay()
Next
Cosi' ti esegue il metodo audioPlay dei primi tre elementi dell'array.
Se vuoi puoi scorrerli tutti con :
For i As Integer = 0 to sound.Length
If i Mod 2 = 0 Then
sound(i) = New gscore10.audio
sound(i).audioPlay()
End If
Next
e poi inserirci delle condizioni che vuoi tu all'înterno, come il modulo 2 che hai usato prima.
mrjohnny
27-01-2006, 15:26
Allora.. puoi creare un array di oggetti di tipo gscore10.audio con
Public sound(5) As gscore10.audio
Ora hai un array chiamato 'sound' di oggetti che ti interessano.
Ora non ricordo precisamente, ma non mi pare sia possibile utilizzare il costrutto New nella dichiarazione di un array, quindi devi inizializzarli in seguito prima dell'uso.
Ora ci puoi accedere come hai scritto tu :
For i As Integer = 0 to 2
sound(i) = New gscore10.audio
sound(i).audioPlay()
Next
Cosi' ti esegue il metodo audioPlay dei primi tre elementi dell'array.
Se vuoi puoi scorrerli tutti con :
For i As Integer = 0 to sound.Length
If i Mod 2 = 0 Then
sound(i) = New gscore10.audio
sound(i).audioPlay()
End If
Next
e poi inserirci delle condizioni che vuoi tu all'înterno, come il modulo 2 che hai usato prima.
Davvero grazie, adesso non ho il tempo di provarlo..
(sono di premura..) mah mi sembre perfetto...
se ti serve qualche cosa.. non esitare a contattarmi!!
By MrJohnny.
mrjohnny
29-01-2006, 00:21
Ok provato!!
Funziona come previsto!!!
By MrJohnny.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.