Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

di il
14 risposte

Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

Ciao

Ho questa sequenza che mi creo per un array di 30 textbox e funziona:

nel Form load:

CatBox.Add(TxtCat1)
CatBox.Add(TxtCat2)
CatBox.Add(TxtCat3)
CatBox.Add(TxtCat4)
CatBox.Add(TxtCat5)
CatBox.Add(TxtCat6)
CatBox.Add(TxtCat7)
CatBox.Add(TxtCat8)
CatBox.Add(TxtCat9)
CatBox.Add(TxtCat10)
...
CatBox.Add(TxtCat30)

Come potrei inserire queste 30 linee in un ciclo

For x = 1 to 30
???
next

Ho provato ma non riesco per evitare di ripeterlo 30 volte.
Risulterebbe più veloce il ciclo FOR NEXT o le 30 linee singole?

grazie
Anto

14 Risposte

  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Cosa è CatBox?

    Perché txtCat non è un array?
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Alla domanda di oregon aggiungo che di queste 30 textbox devi gestire anche la posizione?
    non dovresti aggiungerli alla collezione Controls?
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    È una cosa molto più semplice.

    OREGON: CatBox è il nome che ho dato alla textbox...

    GIAN82: non devo gestire la posizione in quanto già tutto funziona, e le textbox sono già piazzate e in funzione
    Volevo solo evitare di scrivere le 30 linee nel form load rimpiazzandolo nel ciclo FOR x = 1 to 30 e NEXT

    In pratica ho creato semplicemente un "ARRAY" dando questo
    Dim CatBox As New Collection        ' array di 30 textbox chiamate TxtCat1-TxtCat30 in CatBox(x)
    e quindi semplicemente le linee sopra nel form load:
    CatBox.Add(TxtCat1)
    ...
    ...
    CatBox.Add(TxtCat30)
    E tutto funziona benissimo... richiamo come e dove voglio le textbox che ho creato e che ora posso richiamare
    da CatBox(1) ...a...CatBox(30)
    o anche come CatBox(x) con x=1 to 30

    Vorrei cambiare il codice nel From Load ma non sono capace a inserire il numero come variabile nel ciclo del Form Load in un "FOR TO NEXT" per evitare di scrivere le 30 linee sopra
    For x = 1 to 30
      CatBox.Add(TxtCat1)     ' al posto di 1 mettere appunto la variabile "x" che così in 3 linee ne evito 30
    Next
    ma non riesco a scrivere tra le parentesi e le virgolette ecc... la "x"

    Sicuramente più facile da fare che da spiegare ma non ci riesco... (pricipiante...)

    grazie
    Anto
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    AntoAnto ha scritto:


    È una cosa molto più semplice.

    OREGON: CatBox è il nome che ho dato alla textbox...
    No, secondo quello che scrivi, CatBox non è una textbox ma una Collection

    Quindi il codice per aggiungere i controlli, ad esempio, può essere il seguente
    
            For Each c As Control In Me.Controls
                If c.GetType Is GetType(TextBox) Then CatBox.Add(c)
            Next
    
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Si, Oregon hai ragione, è il nome della collection che fa riferimento ai 30 TextBox...

    ma se uso il tuo codice, non è che prende tutte le textbox del form e non solo quelle che ho chiamato e creato nel form come

    TxtCat1
    TxtCat2
    ..

    che nel Load aggiungo con le 30 linee...

    CatBox.Add(TxtCat1)
    ...
    CatBox.Add(TxtCat30)

    Scusa la mia ignoranza, non ho ancora provato non essendo al PC, ma ho l'impressione che con EACH mi prende tutti i textbox del form e non solo i 30, o sbaglio?

    ciao
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Certo che lo fa ma tu hai fatto capire che fossero tutte quelle sul forum o almeno non hai detto diversamente.

    Quindi
    [Code] Dim i As Integer For i = 1 To 30 CatBox.Add(Me.Controls("TxtCat" & i)) Next
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Grazie Oregon

    scusa se non sono stato chiaro....
    Per il consiglio, purtroppo nel mio piccolo è stato il primo tentativo che ho fatto, ma non funzionava pensando di aver sbagliato nettamente la sintassi.

    Ho tolto le 30 linee e ho solo messo come quello che mi hai consigliato anche tu ma quando avvio l'applicazione, si blocca...
    (con qualche modifica brutale che ho provato mostra solo i dati dell'array numero 1 poi si blocca... boh...)

    Al richiamo della variabile dell'array creato in pratica mi sembra di capire che l'array (nome) non esiste.

    "variabile oggetto o variabile del blocco non impostata"

    Non so come potrei verificare i nomi che crea con
    Dim i As Integer
    For i = 1 To 30
    CatBox.Add(Me.Controls("TxtCat" & i))
    Next
    Secondo logica dovrebbe essere giusto, ho provato anche un trim e un str ma nessun risultato

    Non ci riesco, tolgo il ciclo for to next e lascio le precedenti 30 linee... bruttine a vedersi ma almeno va

    CatBox.Add(TxtCat1)
    ...
    CatBox.Add(TxtCat30)

    e tutto funziona perfettamente...

    Comunque se in fattore di "tempo di creazione" è simile tra le 30 linee e il ciclo ForToNext e non cambia molto, lascio tranquillamente le 30 linee, ma è una curiosità nel capire perché non funziona e quale sia la corretta sintassi...

    Grazie ciao
    Anto
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    AntoAnto ha scritto:


    Al richiamo della variabile dell'array creato in pratica mi sembra di capire che l'array (nome) non esiste.
    "variabile oggetto o variabile del blocco non impostata"
    Dove hai scritto quel codice?
    In quale evento?

    Inoltre, di array qui non ce ne sono, al massimo è una Collection o una List.
    Posta il luogo della sua inizializzazione.

    Esegui anche il codice passo passo (saper fare il debug è fondamentale) per vedere se si blocca subito o con determinati nomi, non si sa mai, e verifica qual è la variabile che assume un valore errato o diverso dalle attese mettendo dei "breakpoint" e facendo fermare il programma nel punto giusto, prima di eseguire il ciclo.
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    AntoAnto ha scritto:


    Grazie Oregon

    , ma è una curiosità nel capire perché non funziona e quale sia la corretta sintassi...

    Grazie ciao
    Anto
    Ma se hai una curiosità non ha senso rinunciare senza capire. Approfondisci il problema.

    Forse i txtcap non sono sul form ma in un contenitore diverso all'interno del form?
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Forse i txtcap non sono sul form ma in un contenitore diverso all'interno del form?
    Arghhh esatto, effettivamente sono in un tabcontrol1 - tabpage1 nel form

    Li prende nelle 30 linee senza "indirizzarli" ma probabilmente non nella sequenza senza dirgli esattamente dove...

    Come dovrei inserirla nell'esempio?

    Ho provato ma non funziona,
            Dim i As Integer
            For i = 1 To 30
                CatBox.Add(Me.TabControl1.Controls("TxtCat" & i))
            Next
    si ferma già al Xcat=1 quando verifico ad esempio
    ...
    If Len(Trim(CatBox(Xcat).Text)) >= 2 Then
    ...
    Grazie mille per la dritta...
    Anto
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Se sono in Tabpage1 allora devi scrivere


    CatBox.Add(TabPage1.Controls("TxtCat" & i))
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    Grazie Oregon

    sono fuori fino a mercoledì prossimo, forse riesco a provarlo in remoto ...

    Intanto grazie mille proverò subito...

    Anto
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    >>>sono fuori fino a mercoledì prossimo, forse riesco a provarlo in remoto ...
    GRAZIE OREGON:

    MITICO!!!!!

    Mi son collegato ora in remoto al mio server e ho provato! PERFETTO!

    Avrei pensato ad un
    CatBox.Add(tabcontrol1.TabPage1.Controls("TxtCat" & i))
    che NON FUNZIONA
    CatBox.Add(TabPage1.Controls("TxtCat" & i))
    Che funziona perfettamente!

    Ma non avrei pensato a tralasciare il nome del tabcontrol1.

    Non ho provato con VBnet, ma se avessi nello stesso form un Tabcontrol2 con uno stesso nome TabPage1?

    Grazie!
    Ho risolto e sembra più veloce che le linee singola ma non sono sicuro, mi piacerebbe verificare con un semplice timer per vedere se le 30 linee sono più o meno veloci rispetto ad un ciclo for to next. Sembrerebbe per quest'ultimo.
    Qualche consiglio?

    grazie a tutti per l'aiuto.
    Anto
  • Re: Ciclo "For to Next" per un ARRAY (Collection o List) SOLVED

    AntoAnto ha scritto:


    ma se avessi nello stesso form un Tabcontrol2 con uno stesso nome TabPage1?
    No, non avresti avuto un altro TabPage1
    sono più o meno veloci rispetto ad un ciclo
    Non è una differenza importante...

    In ogni caso, si usa il ciclo.
Devi accedere o registrarti per scrivere nel forum
14 risposte