Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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.

  2. #12
    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.

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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 ...

  4. #14
    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:
    codice:
    Private Sub Form_Load()
        Set myclass = New Class1
        
        MsgBox field(0).desc
    End Sub
    Nel Modulo1 ho inserito:
    codice:
    Public field() As TipoDati
    
    Public Type TipoDati
        desc As String
    End Type
    E infine nella Class1 ho inserito:
    codice:
    Public Sub Class_Initialize()
        ReDim field(2)
        
        field(0).desc = "1"
        field(1).desc = "2"
        field(2).desc = "3"
    End Sub
    In questo modo è ovvio che funzioni, infatti l'MsgBox mi stampa "1".
    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

  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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

    codice:
    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
    e nel form principale

    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

  6. #16
    Grazie molte, ora funziona

    Ma quindi se ho capito bene, col metodo dell'array oggetto è più difficile da implimentare?

  7. #17
    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


  8. #18
    nessuno? :berto:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.