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)"
Ora però dopo aver dichiarato la variabile WorkDay (Dim WorkDay As CLavoro)
nella sezione dichiarazioni generali del form , e nella routine Form_Load
aver creato l'oggetto (Set WorkDay = New CLavoro),
appena avvio il progetto mi appare l'errore :
"Variabile oggetto o variabile del blocco With non impostata (errore 91)"
con la riga selezionata sulla routine che mi hai consigliato
Private Sub Class_Initialize()
Dim i As Integer
For i = 1 To 10
arrayTreni(i) = New CTreno <===== [RIGA SELEZIONATA DAL DEBUG]
Next
End Sub
Che posso fare?
Ti ringrazio ancora
ciao
Daniele
"Luca D" <antan...@yahoo.it> ha scritto nel messaggio
news:11384000-a511-40bd...@j27g2000yqn.googlegroups.com...
ciao
"Alice Casa" <indelicat...@alice.it> ha scritto nel messaggio
news:4b9beb8f$0$1113$4faf...@reader2.news.tin.it...
Ho risolto modificando ciò che mi hai scritto :
In pratica ho aggiunto le due istruzioni "SET".
Public Property Get Treno(ByVal Index As Long) As CTreno
Set Treno = arrayTreni(Index)
End Property
Private Sub Class_Initialize()
Dim i As Integer
For i = 1 To 10
Set arrayTreni(i) = New CTreno
Next
End Sub
==============================================================
"Alice Casa" <indelicat...@alice.it> ha scritto nel messaggio
news:4b9c085d$0$817$4faf...@reader5.news.tin.it...