Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Array come proprietà di una classe

Volevo chiedrvi cortesemente un aiuto , giusto per mettermi nella giusta 
direzione.
Devo realizzare una specie di agenda per il mio lavoro (sono un macchinista 
fs).
Dunque vorrei modellare un classe che mi permetta di accedere ai dati di 
ogni giornata di lavoro di ogni giorno dell'anno.
Quindi se la 43° giornata ho fatto 3 treni , e voglio sapere la stazione di 
partenza del secondo treno con la seguente istruzione vorrei estrarre il 
dato:
MsgBox Anno2010(43).Treno(2).StazPart
oppure se voglio sapere il numero di locomotore sempre della stessa giornata 
ma del 3° treno :
MsgBox Anno2010(43).Treno(3).NumLoco
Tutto questo lo so fare creandomi due tipi e due array WorkDay(365)  = 
giorni in un anno e Treno(10) = numero di treni effettuati in giornata.
********************************************
Public Type tpTreno
  NumLoco As String
  NumTreno As String
  StazPart As String
  StazArr As String
End Type
Public Type tpLavoro
   Treno(1 To 10) As tpTreno
   Chiave As String
   Condotta As Integer
   Impegno As Integer
End Type
Public Workday(365) As tpLavoro
L'esecuzione è corretta :
********************************************
MsgBox Workday(1).Treno(1).NumTreno
********************************************
Provando con le classi:
Creo 2 classi : CLavoro  e  CTreno ;  all' interno  della classe CLavoro 
come faccio a creare una proprietà di tipo CTreno che mi gestisca l'array 
Treno(10) e che mi permette di ottenere il risultato visto più sopra con le 
strutture tpTreno e tpLavoro ?
Grazie .... sono benvenuti anche degli esempi ;-))
Daniele 


Non ho VB6 sottomano, non mi ricordo esattamente se era possibile
rendere direttamente pubblici gli array; mi pare che quelli a
dimensione fissa non si possa, ma quelli a dimensione variabile si...
se davvero è così, allora è sufficente che tu lo dichiari dinamico e
lo inizializzi a 10 nel class_initialize
Se invece ricordo male, allora hai comunque alternative che
sicuramente funzionano:
a) Se non devi essere strettamente legato al tipo array per altri
motivi, usa una semplice collection, che è molto più flessibile
Private mTreno As Collection
Sub Class_Initialize
    dim i as integer
    Set mTreno = New Colelction
    For i = 1 to 10
       mTreno.Add New CTreno
    Next
End Sub
Public Property Get Treno() As Collection
    Set Treno = mTreno
End Property
b) Dichiari un array privato, e lo rendi accessibile tramite una
Publci Property Get opportuna; un po' più scomodo rispetto al caso a)
se per caso le dimensioni della lista cambiano a runtime, ma se 10 è
un tuo limite fisso di design, allora probabilmente questa alternativa
è migliore perchè più controllata rispetto alla prima (l'array/
collection non è direttamente accessibile dall'esterno, e quindi, ad
esempio, non può essere ridimensionata o svuotata per errore)
'In CLavoro
Private arrayTreni(1 to 10) As CTreno
Sub Class_Initialize
    dim i as integer
    For i = 1 to 10
       arrayTreni(i) = New CTreno
    Next
End Sub
Public Property Get Treno(ByVal Index as Long) As CTreno
    'TODO: controlli di correttezza dell'indice
    Treno = arrayTreni(Index)
End Property
In entrambi i casi, il codice esterno si può riferire al singolo treno
con la sintassi "lavoro.treno(indice)"

 ha scritto nel messaggio 
news:11384000-a511-40bd...@j27g2000yqn.googlegroups.com...


 ha scritto nel messaggio 
news:4b9beb8f$0$1113$4faf...@reader2.news.tin.it...


 ha scritto nel messaggio 
news:4b9c085d$0$817$4faf...@reader5.news.tin.it...
