Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo esistenza oggetto.

Ciao a tutti, è una delle prime volte che vi scrivo se non la prima.
Spesso lurkando ho appreso interessanti informazioni sulla programmazione in
vb (con la quale mi sto esercitando da pochi mesi)
Sono arrivato ad un piccolo problema, forse una banalità.
Come faccio a vedere se un oggetto della form non c'è ? Oppure se è già
stato caricato che dovrebbe essere la stessa  cosa?
Grazie ;)
MarLaw

 Come faccio a vedere se un oggetto della form non c'è ?
Scandaglia l'insieme Nome_form.Controls
Oppure metti On error goto label_errore prima di riferirti a una proprietà
(esistente e coerente) del controllo.
Mi resta comunque un dubbio: Come fai a NON sapere quali oggetti hai nel
form?

 Grazie ;)
Non c'è è una cosa...è già stato caricato (c'è) è un'altra!
Comunque piazza questo dentro il form:
        Dim c As Integer
        For c = 0 To Me.Controls.Count - 1
            Debug.Print Me.Controls(c).Name
        Next c
E ti tira fuori il nome di tutti i controlli del form stesso.
Gianni

 form?
Grazie mille! Ho usato quest'ultima.
Per quanto riguarda il come faccio a NON sapere...ho fatto una matrice di
controlli winsock che si incrementa ogni volta che viene richiesta una
connessione.
Una chat..room. E io devo mandare il messaggio a tutti i winsock attivi..ma
anche mettendo un contatore mi risultavano sempre di più di quelli che in
realtà erano attivi generando un errore.
Ci sono stato tutto il giorno..e non trovavo la soluzione a quell'errore..e
quindi ho messo che deve provare a fare tutto il ciclo del contatore e se
c'è errore di sbattersene e andare avanti.
Grazie ancora..è una goduria vedere le cose andare.
Ciao ;)

 Grazie ancora..è una goduria vedere le cose andare.
umm umm non e' piu' performante usare la prima proposta di lupo ?
in pratica scansioni tutti gli oggetti del form testando ad esempio il nome
,
mettiamo che i tuoi oggetti si chiamino Winsock(index) , basta testare il
nome , in pratica ti considera solo gli oggetti che sono caricati sul form
evitando cosi l'errore di un controllo non caricato ecc..
Esempio non testato
....
dim myObject as object
    for each myObject in form1.controls
        if left$(
myobject.name
,7) = "Winsock" Then
            ' l'oggetto e' un oggetto winsock ed eseguo quello che devo fare
               myObject.senddata....
        else
            ' e' un altro oggetto ...
        end if
    next
...
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

         Next c
ops, non avevo notato il tuo post scusate per il doppio post + questo di
scuse :p


 realtà erano attivi generando un errore.
Pessima soluzione, in questo caso.
Mi devi spiegare come fai a non sapere quanti Winsock hai!
For i = 0 To winsockarray.Count - 1
    ...
Next i
per caricarli
MaxIndex = MaxIndex + 1
if (MaxIndex > 0) then
    Load Winsock(MaxIndex)
Endif
per scaricarli
if (MaxIndex > 0) then
    Unload Winsock(MaxIndex)
Endif
MaxIndex = MaxIndex - 1
Se ne scarichi uno nel mezzo
' sempre che si possa fare con un oggetto di tipo WinSock
For i = IndexScaricato + 1 To winsockarray.Count - 1
    set winsockarray(i-1) = winsockarray(i)
Next i
Unload winsockarray(MaxIndex)
MaxIndex = MaxIndex - 1
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 connessione.
Vedi attentamente, in particolare, il post di Zanna.
Ti basta, con qualsiasi artificio (una collection, un vettore tuo, persino
una stringa nella quale ogni byte corrisponde a un indice...): Tienti nota
dei controlli che crei e di quelli che distruggi...

 in pratica scansioni tutti gli oggetti del form testando ad esempio il
nome
Si in effetti si.
Adesso ho messo un timer che in automatico con quell'esempio scarica un
winsock se  non è più attivo..
ho anche messo di mandare il messaggio a tutti i controlli che risultano dei
winsock e che allo stesso tempo risultano come *.state = sckConnected .
Grazie mille, siete stati veloci e molto esaurienti.
Ciao ;)
MarLaw

"MarLawX"
Ho trovato anche un altro modo :
Dim ctlControl As Control
For Each ctlControl In Me.Controls
     If TypeOf ctlControl Is Winsock Then
         ' l'oggetto e' un oggetto winsock
        'codice..
    End If
Next
;)
Ciao

MarLawX ha scritto:

Non è esattamente "un altro modo":
Usi sempre l'insieme Controls del Form e, anzichè controllare il nome del
controllo, ne controlli il tipo...
Ma se hai altri Winsock per altri scopi...?

 Ma se hai altri Winsock per altri scopi...?
Hai ragione.Non ci avevo pensato..
Ma in questo caso mi va bene..
;)
Ciao