Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Ancora con Collection e Variant (lungo)

Ragazzi, per favore una premessa. Non  incazzatevi se insisto a volte su uno
stesso argomento ma vedete sono tre anni che non tocco più il VB e quindi
piuttosto che convincermi di aver capito - il che sarebbe antiproduttivo per
me - cerco di tornare sulle cose 100 volte fino a quando non ho capito sul
serio.
Il primo problema riguarda l'Oggetto Collection:
[...] Naturalmente è possibile rendere queste strutture composte più
complicate, secondo le necessità del momento. Ogni elemento Employees per
esempio potrebbe contenere un gruppo di informazioni ulteriori, come il
numero di ore di lavoro dedicate da ogni impiegato a un dato cliente:
Dim Employees As New Collection, Customers As Collection
'Ogni elemento è composto di (Name, Dept, Salary, Customers)
Set Customers = New Collection
Customers.Add 10, "Tech Eight, Inc"
Customers.Add 22, "HT Computers"
Employees.Add Array("John", "Marketing", 80000, Customers), "John"
'Inizia ogni volta con una nuova Collection
Set Customers = New Collection
Customers.Add 9, "Tech Eight, Inc"
Customers.Add 44, "Motors UnLimited"
Employees.Add Array("Anne","Sales", 75000, Customers), "Anne"
'e così via...
non riesco a capire bene la struttura di questo blocco di istruzioni....Il
metodo Add aggiunge elementi ad indici non contigui....inoltre non capisco
bene come vengono gestiti i dati.....cioè....Perchè usare due volte Add per
ogni nuova istanza? Cosa capite che io non capisco?
2. L'uso delle Variant come parametri.
Una Variant funge da puntatore agli Array e/o Collection. Ad es.
'John lavora con il cliente "HT Computers"?
Dim hours As Long, var As Variant
On Error Resume Next
hours = Employees("John")(3)("HT Computers")
'Hours è zero se l'istruzione precedente fallisce
L'istruzione cosa restituisce: vero, falso, un numero? Quel 3 dovrebbe
essere un indice che punta ad un campo prestabilito, vero?
E quella Variant dichiarata a cosa servirebbe?
3.Ho il seg. codice:
Option Explicit
Dim nomi As New Collection
Private Sub Command1_Click()
Dim i As Long
For i = 1 To 10
    nomi.Add i, List1.List(i)
Next
End Sub
Private Sub Command2_Click()
Dim i As Long
For i = 1 To 10
    Print nomi.Item(i)
Next
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Command4_Click()
Dim i As Long, j As Long, numels As Long
On Error Resume Next
j = LBound(nomi) - 1 'Errore: prevista matrice
numels = UBound(nomi)
For i = LBound(nomi) To numels
    nomi.Add 0, , CStr(nomi(i))
    If Err = 0 Then
        j = j + 1
        If i <> j Then
            nomi(j) = nomi(i)
        Else
            Err.Clear
        End If
    End If
Next
For i = j + 1 To numels
    nomi(i) = Empty
Next
numels = j
End Sub
Private Sub Form_Load()
Dim i As Single
For i = 1 To 10
    List1.AddItem Choose(i, "Alberto", "Alberto", "Antonio", "Carlo",
"Piero", "Giulio", "Giulio", "Leandro", "Alessandro", "Alessandro",
"Giulia", "Francesca", "Simona")
Next
End Sub
Ho un form con una ListBox con i nomi, un commandbutton che copia i nomi in
un oggetto collection, un altro commandbutton che mostra gli indici sul form
ed un altro command che dovrebbe eliminare i doppi. Ora se non elimino i
doppi non posso caricare la lista nella collection perchè ho chiavi doppie,
ma quando clicco suk pulsante per eliminare i doppi ho il seg. errore:
j = LBound( nomi ) Prevista Matrice
Non capisco l'errore.....
Mi scuso ancora una volta, ma vogliate aiutarmi a comprendere fino in fondo
i vari concetti. Studio da autodidatta, non ho esercizi da
risolvere......datemi una mano per favore....
Vi ringrazio anticipatamente, scusandomi ancora una volta per l'insistenza
dei miei messaggi.
Buon lavoro.

 Customers.Add 44, "Motors UnLimited"
La collezione Customers ora contiene due elementi (9 e 44) che possono
essere rintracciati con le chiavi "Tech Eight, Inc" e "Motors UnLimited":
Debug.Print Customers.Items("Motors UnLimited") ' Stampa 44
Chiaro?
Per la forma con Array() la storia non cambia molto: gli items di una
collezione sono Variant, quindi possono contenere numeri, stringhe, array e
persino oggetti (credo anche UDT)
Se vuoi qualcosa di più (con una "piccola" limitazione) puoi usare le
XCollection presenti sul sito comune nella sezione Leonardo.
Ciao
-- SiDB Simple DataBase engine ---------------------------
 
http://space.virgilio.it/zntf...@tin.it/sidb/sidb.htm
----------------------------------------------------------