Newsgroup: it.comp.lang.visual-basic
Titolo: E' Possibile passare array di controlli





Volevo solo sapere se era possibile passare array 
di controlli a funzioni, perchè io non riesco a farlo!


 









Basta dichiarare i parametri come object se e' 
una collezzioni di oggetti, se usi array di variant devi dichiarare array di 
variant (ma guarda' un po' le coincidenze).


 


Salve


                        
Dbg




"Ricardo"
 wrote in 
    message
 ...






COME MAI NON FUNZIONA?


 


Private Function ISLOADED(ARR() As Object, INDEX As 
Integer)
On Error GoTo ERR_HANDLER
Dim BUDDY As Object
Set BUDDY = 
ARR(INDEX)
ISLOADED = True
Exit Function
ERR_HANDLER:
End 
Function


 


Private Sub Command1_Click()
MsgBox 
ISLOADED(Text1(), 5)
End Sub



"Ricardo" ha scritto nel messaggio ...










Prova cosi:


 


Private Function ISLOADED(ARR As Object, INDEX As 
Integer)
On Error GoTo ERR_HANDLER
Dim BUDDY As Object
Set BUDDY = 
ARR(INDEX)
ISLOADED = True
Exit Function
ERR_HANDLER:
End 
Function


 


Private Sub Command1_Click()
MsgBox 
ISLOADED(Text1,  5)
End Sub


 


Cmq devi postare anche il messaggio di errore e in 
che linea ti da' errore.


 


Salve


                            
Dbg


 


 




 









alla fine ho fatto così, ma non capisco perchè non 
posso passare l'array ad un altro array e devo per forza infilarlo in una 
variant o i una object


Buddy.TAG=""


 MI SERVE IN QUANTO ANCHE SE PASSO UN INDICE 
INESISTENTE NON MI DA ERRORE CON 


SET BUDDY=ARR(INDEX)


 


QUESTO CODICE POTREBBE AVERE DEI PROBLEMI NEL CASO 
IN CUI STESSI TESTANDO DEGLIO OGGETTI CHE NON POSSIEDONO LA PROPIETA' TAG IN TAL 
CASO MI RESTITUIREBBE 


SEMPRE FALSE


 


 


 


 


 


Private Function ISLOADED(ARR As Variant, INDEX As 
Integer) As Boolean
On Error GoTo ERR_HANDLER
Dim BUDDY As Object
Set 
BUDDY = ARR(INDEX)
BUDDY.Tag = ""
ISLOADED = True
Exit 
Function
ERR_HANDLER:
End Function
 
Private Sub 
Command1_Click()
Dim x As Integer
For x = 0 To 10
MsgBox 
ISLOADED(Text1(), x)
Next
End Sub


 


ALTRA POSSIBILE SOLUZIONE CHE DEVE SCORRERE TUTTO 
L'ARRAY


 


Private Function ISLOADED(ARR As Object, INDEX As 
Integer) As Boolean
Dim contatore As Object
For Each contatore In 
ARR
If contatore.INDEX = INDEX Then
ISLOADED = True
Exit 
Function
End If
Next


 


End Function
 
Private Sub 
Command1_Click()
Dim x As Integer
For x = 0 To 10
MsgBox 
ISLOADED(Text1, x)
Next
End Sub









Alt alt alt, ti sbagli, quello che stai passando 
non e' un array ma una collezioni di oggetti, ed una collezione e' un 
oggetto.


Per fare la verica usa le 
istruzioni vartype e simili che ti dicono che tipo di variabile e',cosi eviti 
abbagli.


 


Salve


                    
DBG






Allora perche viene definito array di 
controlli?


Ho fatto le prove con vartype e typename e mi 
restituisce object.


Ma se è una collection come tu la definisci perchè 
non ha i classici metodi delle collection?


Perchè,se è una collection, non la posso associare 
nella funzione ad una collection?


 


Sono arrivato alla conclusione che è un ibrido, e 
questo detrmina che nella mia funzione non posso evitare il 
late_binding.


 


 


 









Alt alt, non e' una collection, e' una 
collezione (insieme) di oggetti, sono cose diverse, ti ho confuso usando un 
termine ambiguo.


 


Supponendo che tu usi textbox, per evitare il late_binding 
prova:


 




Private Function ISLOADED(ARR As textbox, INDEX As 
Integer)
End Function


 


o (n
on mi ricordo mai il nome della 
classe dei controlli, accidenti all'aerosclerosi e alla 
menodivisoperpausa)


 




Private Function ISLOADED(ARR As control, INDEX As 
Integer)
End Function


 


Salve


                    
Dbg


 




"Ricardo"
 wrote in 
    message
 ...








Private Sub Command1_Click()
MsgBox 
isloaded(Text1, 5)
End Sub


Private Function isloaded(arr As TextBox, index As 
Integer)


End Function


 


questo codice da errore, ricadiamo nel problema 
che segnalavo ieri,


sia che passi text1() o text1 da errore " tipo 
non corrispondente " perche 


text1() o text1 non è una  textbox


Anche se dichiaro il parametro nella funzione come 
arr()  mi dice tipo non corrispondente ,"prevista matrice o tipo definito 
dall'utente" è ciò fa suppore che text1 o text1() non sia un array e neanche un 
oggetto della classe textbox e perciò come lo dichiaro per evitare il late 
binding ?