Newsgroup: it.comp.lang.visual-basic
Titolo: [?2] matrice di controlli

Ciao a tutti,
sto utilizzando una matrice di CommandButton (inseribili a run-time) e do la
possibilità di cancellarli. Devo anche salvare le posizioni di tali
controlli in un MDB. Come faccio a sapere se l'nesimo controllo esiste o è
stato cancellato?
P.S. ieri, molto gentilmente Claudio Gamberini mi ha risposto così:
if not(mioControllo is nothing) ...
ma non funziona ugualmente.
Nel mio PGM:
For iConta = 1 To Me.cmdCampo.Count - 1
        If Not (cmdCampo(iConta) Is Nothing) Then
            .....
            .....
        end if
next
ma quando testa l'IF e non trova ad esempio il cmdCampo(3) mi da un errore
340 e mi dice che il controllo 3 non esiste.
Avrei bisogno di riuscire a testare l'esistenza del cmdCampo(x).
Grazie
Ciao.
Paolo


Ciao
è un po macchinosa come soluzione, ma se non trovi
di meglio........
Tutti i controlli di un form sono automaticamente
inseriti in una proprietà del form che è una Collection:
Form.Controls
Puoi utilizzare un oggetto Control per fare un ciclo
su questa collection:
Private Sub Qualcosa()
    Dim Ctrl as Control
    For Each Ctrl in Me.Controls
        'E qui fai i tuoi controlli su ogni oggetto del form
        If Ctrl.Name .........
        End If
    Next Ctrl
End Sub
Ciao
Yoda
VB 6 BCP
(Balasso Certified Professional)

 stato cancellato?
Command1.Count
Command1.LBound
Command1.UBound
come usarli .... ci devi da smanettare.
bye by luigi

 340 e mi dice che il controllo 3 non esiste.
prova a mettere un 'On Errror GoTo ManagerError' .. in testa al programma
cosi puo verificare l'esistenza o meno del controllo attraverso
l'intercettazioe dell'errore.
On Errror GoTo ManagerError
For iConta = 1 To Me.cmdCampo.Count - 1
         If Not (cmdCampo(iConta) Is Nothing) Then
             .....
             .....
         end if
next
exit sub
ManagerError:
  MsgBox "Controllo inesistente"

 ha scritto nel messaggio
news:ilfS8.69810$j65.1...@twister1.libero.it...

Grazie per la risposta ma ci avevo già pensato, però non mi sembra la
soluzione più lineare (e se lo stesso errore mi capita per un altro motivo?)
Grazie
Ciao.
Paolo


Grazie per la risposta me non vedo l'utilità di sapere quanti sono i
controlli dato che io vorrei sapere se il controlle numero X esiste o no!!!
Il problema è che quando faccio qualsisi controllo su: mioControllo(n) mi da
errore 340 se "n" non esiste
Ciao
Paolo


Grazie per la risposta ma non funziona cmq:
iConta = 0
    For Each Ctrl In Me.Controls
            iConta = iConta + 1
            rRec.AddNew
            rRec("nome_formato") = "1"
            rRec("campo") = cmdCampo(iConta).Caption
            rRec("YY") = Round((cmdCampo(iConta).Top / 569.76744), 6)
            rRec("XX") = CCur((cmdCampo(iConta).Left / 135)) * 0.24
            rRec("left") = cmdCampo(iConta).Left
            rRec("top") = cmdCampo(iConta).Top
            rRec("image") = ""
            rRec.Update
    Next Ctrl
Quando "iConta" diventa un numero che NON esiste ---> errore 340
Forse non ho capito il tuo suggerimento.
Grazie
Ciao
Paolo

 Grazie per la risposta ma non funziona cmq:
Probabilmente il saggio maestro jedi voleva dire suggerire qualcosa del
genere:
For Each Ctrl In Me.Controls
    If Ctrl.Name = "cmdCampo" 'ovvero nome del controllo in matrice (senza
indice)
        rRec.AddNew
        rRec("nome_formato") = "1"
        rRec("campo") = Ctrl.Caption
        rRec("YY") = Round(Ctrl.Top / 569.76744), 6
        'ecc..
    End If
Next Ctrl
se poi hai bisogno di sapere l'indice nella matrice del controllo corrente,
e' sufficiente leggere (sempre internamente al ciclo for each) Ctrl.Index
Il fatto che definisse la soluzione macchinosa, immagino sia dovuto
all'inevitabile necessita di dover "cablare" nel codice qui sopra il nome
della matrice...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown


VERA..... Veramente GRAZIE!!!
Ora funzia!
Anche se non capisco perchè quando scrivo "Ctrl."   non mi da l'elenco delle
proprietà (es. Name, Index ecc.)
Grazie ancora.
Ciao
Paolo

 proprietą (es. Name, Index ecc.)
Perche' e' dichiarato genericamente come Control, che (credo) sia una classe
di interfaccia senza membri implementata da tutti i controlli VB; in design
non e' in grado di sapere a quale classe fara' riferimento di volta in volta
(cosi' come le generiche variabili Object) e quindi niente IntelliSense...


 controlli dato
come ho giustamente letto tu hai scritto nesimo
che significa il numero n di n elementi :-)))
bye by luigi

 errore 340 se "n" non esiste
mi sembra comunque che te lo avessero gia suggerito
oltre la soluzione dell'if ..is nothing ...
ti posso consigliare di usare le Collection
che sono abbastanza semplici da usare.
bye by luigi

 ti posso consigliare di usare le Collection
mi riferivo ad una collection personale logicamente e non
a quelle predefinite
per vedere qualche esempio di come si aggiungono elementi ad una collection
come si rimuovono ecc  puoi andare sull'help
puoi avere anche riferimenti all'elemento precedente o successivo ad un
certo elemento della collection stessa
bye by luigi