E non ne potrai uscire perche', come scrive MS
"This behavior is by design"
Il modo corretto di scrivere codice del genere in VB6 e' quello di fare in modo che la tua classe restituisca un oggetto di un'altra classe al posto dell'UDT.
E non ne potrai uscire perche', come scrive MS
"This behavior is by design"
Il modo corretto di scrivere codice del genere in VB6 e' quello di fare in modo che la tua classe restituisca un oggetto di un'altra classe al posto dell'UDT.
Cioè quindi dovrei costruire due classi, dove la prima la passa alla seconda e poi la passa al form?
Ho capito bene? Fin'ora ho lavorato con VB6, ma le classi non le ho mai fatte (almeno su VB6).
Per caso c'è qualche esempio che posso spulciare riguardo la mia richiesta?
Grazie.
Tu hai gia' la MainClass ... scrivi una seconda classe che utilizzi al suo interno, come membri pubblici, i campi che avevi inserito nella struttura. A questo punto, la MainClass, quando servira', creera' una istanza della seconda classe e la restituira' al Form ...
Forse sarò scemo ma il metodo che mi ha suggerito di adottare proprio non l'ho capito e sono giunto ad un altra conclusione, anche se devo dire che mi pare un pò una zozzata o sbalio?
Allora prima di tutto per fare questa prova ho creato un nuovo progetto, dove ho incluso un form (Form1.frm), un modulo standard (Module1.bas) e un modulo di classe (Class1.cls).
Nel Form1 ho messo:
Nel Modulo1 ho inserito:codice:Private Sub Form_Load() Set myclass = New Class1 MsgBox field(0).desc End Sub
E infine nella Class1 ho inserito:codice:Public field() As TipoDati Public Type TipoDati desc As String End Type
In questo modo è ovvio che funzioni, infatti l'MsgBox mi stampa "1".codice:Public Sub Class_Initialize() ReDim field(2) field(0).desc = "1" field(1).desc = "2" field(2).desc = "3" End Sub
Scusa oregon ma con le classi in VB6 non ne so un H, non avendole mai studiate. Il progetto che sto facendo mi serve per lavoro. E volendo secondo te il metodo che ho utilizzato potrebbe andar bene?
Grazie ancora per la pazienza![]()
No ... assolutamente non va ... cosi' i dati non sono affatto legati a nessuna istanza di Class1 in quanto non sono privati della classe ...
Il metodo piu' corretto (allo stato dei fatti) e' quello di usare una sola classe, in questo modo ...
Nel file Class1.cls
e nel form principalecodice:Option Explicit Private mType() As String Private mDesc() As String Private mEnabled() As Boolean Public Property Get PType() As String() ReDim mType(6) As String mType(0) = "cod" mType(1) = "text" mType(2) = "text" mType(3) = "date" mType(4) = "num" mType(5) = "text" mType(6) = "text" PType = mType End Property Public Property Get PDesc() As String() ReDim mDesc(6) As String mDesc(0) = "Codice" mDesc(1) = "Nome" mDesc(2) = "Cognome" mDesc(3) = "Data di nascita" mDesc(4) = "Età" mDesc(5) = "Sesso" mDesc(6) = "Comune di nascita" PDesc = mDesc End Property Public Property Get PEnabled() As Boolean() ReDim mEnabled(6) As Boolean mEnabled(0) = False mEnabled(1) = True mEnabled(2) = True mEnabled(3) = True mEnabled(4) = False mEnabled(5) = True mEnabled(6) = True PEnabled = mEnabled End Property
codice:Option Explicit Private Sub Form_Click() Dim mClass As Class1 Dim t As Variant Dim d As Variant Dim e As Variant Set mClass = New Class1 t = mClass.PType d = mClass.PDesc e = mClass.PEnabled Print t(0), d(0), e(0) ' ... Print t(6), d(6), e(6) End Sub
Grazie molte, ora funziona
Ma quindi se ho capito bene, col metodo dell'array oggetto è più difficile da implimentare?
Originariamente inviato da oregon
E non ne potrai uscire perche', come scrive MS
"This behavior is by design"
Il modo corretto di scrivere codice del genere in VB6 e' quello di fare in modo che la tua classe restituisca un oggetto di un'altra classe al posto dell'UDT.
Ciao, mi intrometto anche io!!![]()
E' lo stesso escamotage che ho usato io... però non vorrei che la seconda classe fosse vista della form1! vorrei che solo la mia classe principale possa essere instanziata e quella che contiene solo le definizioni fosse nascosta nel form1 ma vista dalla classe1
![]()
nessuno? :berto: