Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141

    Uso di "WithEvents"

    Mi fate un esempio sull'uso una classe personalizzata, sono riuscito a capire come usare un Property, un Metodo ma non riesco a costruire un Evento...
    dove devo scriverlo WithEvents, se lo metto nel Modulo non funziona, ho letto che devo metterlo nel Modulo di Classe ma non so come...bo
    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

  2. #2
    Linguaggio?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da MItaly
    Linguaggio?
    Quoto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141
    Scusate, anche voi avete le vostre ragioni...VB6
    Non riesco a creare un oggetto con un evento, ad esempio che attivi l'evento quando cambia il valore di una sua proprietà!!
    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141
    In realtà sto provando su VBA, ma credo che ciò che va su VB6 va anche su VBA o no ?!?!
    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non tutto quello che funziona con VB6 si puo' passare in VBA ... penso che la gestione degli eventi funzioni ...

    In VB6, un esempio

    In un form scrivi

    codice:
    Private WithEvents obj As MiaClasse
    
    Private Sub Form_Load()
        Set obj = New MiaClasse
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set obj = Nothing
    End Sub
    
    Private Sub Form_Click()
        obj.Valore = 1
    End Sub
    
    Private Sub obj_ValoreModificato()
        MsgBox "OK"
    End Sub
    e in un modulo di classe (MiaClasse)

    codice:
    Private mValore As Long
    
    Public Event ValoreModificato()
    
    Public Property Let Valore(ByVal vData As Long)
        mValore = vData
        RaiseEvent ValoreModificato
    End Property
    
    Public Property Get Valore() As Long
        Valore = mValore
    End Property
    Spero ti sia tutto chiaro.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141
    Vi faccio un esempio stupidissimo che sto provando a fare, solo per capire come fare le cose.
    SCUSATE LA MIA FANTASIA CHE E' MOLTO LIMITATA, PORTATE PAZIENZA


    -------------------------DOMANDE
    1) Come mai se scrivo nel "MODULO" "Public WithEvents Righello As MioOggetto" mi da errore
    2) "DimensioneLunghezza" è una proprietà semplice, è indispensabile usarla per registrare la proprietà "Dimensione", nelle altre classi di Excel non vedo mai in elenco proprietà semplici, ma solo property
    3) A cosa sarvirebbe una proprietà semplice senza le istruzioni property, dato che non posso modificarla ne leggerla??
    4) Se scrivo solo la LET oppure solo la GET che senso ha una proprietà che può essere solo scritta e non letta oppure viceversa??
    5) Il mio esempio vorrebbe che nel ciclo quando il righello diviene troppo lungo si attiva il messaggio per avvisarmi che è troppo lungo per il mio portapenne. Ha senso usare un evento così oppure no, nel secondo caso mi fate un esempio a cosa potrebbe servire un evento!!
    7) Mi dite come fate a far comparire il codice con caratteri diversi che non l'ho ancora capito (i pulsanti in alto come si devono utilizzare grassetto, sottolineato ecc...li schiaccio ma nulla cambia?!?!) (scusate la domanda stupidissima!!)

    ---------------------------ECCO COSA HO SCRITTO NELLO "MODULO"

    Option Explicit
    Dim i As Integer
    Public Righello As MioOggetto
    Public Sub DimensioneRighello()
    Set Righello = New MioOggetto
    Righello.Dimensione = 20
    Debug.Print Righello.Dimensione
    For i = 1 To 5
    Righello.Dimensione = Righello.Dimensione + 10
    Debug.Print Righello.Dimensione
    Next i
    End Sub
    Public Sub TroppoLungo(L, Ms)
    MsgBox "E' troppo lungo"
    End Sub

    ------------------------ECCO COSA HO SCRITTO NELLO "MODULO DI CLASSE"

    Option Explicit
    Private DimensioneLunghezza As Integer
    Public Property Get Dimensione() As Integer
    Dimensione = DimensioneLunghezza
    End Property
    Public Property Let Dimensione(L As Integer)
    DimensioneLunghezza = L
    If DimensioneLunghezza >= 50 Then
    RaiseEvent TroppoLungo(Dimensione, "TroppoLungo")
    End If
    End Property
    Public Function Allunga(L)
    Dimensione = Dimensione + L
    End Function
    Event TroppoLungo(L, Ms)

    Grazie Oregon, ho usato poco VB6, se non ricordo male tutto parte dal Form iniziale, qui io faccio partire tutto da un modulo, ma dovrebbe essere la stessa cosa
    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141
    Rispondo ad Oregon, vediamo se ho capito!!

    Hai istranziato l'oggetto della classe che hai creato all'apertura del form e lo elimini quando scarichi il form, fin qui ok

    Con

    Private Sub Form_Click()
    obj.Valore = 1
    End Sub

    modifichi il valore della proprietà che serve per fare partire l'evento, credo

    La variabile mValore ti serve per memorizzare il valore, non capisco perchè non si pissa direttamente memorizzare in "obj.Valore", è come se servisse una variabile d'appoggio che mi compare nell'elenco di sugerimento quando costruisco il codice, mi è d'intralcio ma talke variabile non posso toccarla altrove (negli oggetti già fatti queto tipo di varialìbili non c'è, sbaglio!?!)
    Poi dichiari l'evento con Public Event, quando cambi valori parte l'evento con RaiseEvent
    che rischiama una sub di gestione evento (cioè cosa deve fare il programma) che si trova scritta nel Modulo e non nel Modulo di Classe.
    Ho capito bene??? Mi sono spiegato un po' male ma forse ho capito e provo. Grazie dell'aiuto, io pensavo che quest'ultima sub andasse scritta sempre in modulo di classe.

    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da zxc80
    Hai istranziato
    L'ho solo istanziato ...

    La variabile mValore ti serve per memorizzare il valore, non capisco perchè non si pissa direttamente memorizzare in "obj.Valore"
    mValore rappresenta il valore corrente della proprieta' dell'oggetto istanziato.

    obj.Valore e' corrispondente a mValore ...


    mi è d'intralcio ma talke variabile non posso toccarla altrove (negli oggetti già fatti queto tipo di varialìbili non c'è, sbaglio!?!)
    Veramente rappresenta la parte privata dell'oggetto ... e' un "fondamento" della programmazione ad oggetti ... (anche se VB6 non e' proprio OOP).

    Hai un po' di confusione su come e' fatto un oggetto e cosa e' una classe ... rivedi questi argomenti ...

    si trova scritta nel Modulo
    ... nel codice del Form ... non nel Modulo ... non puoi usare un Modulo ma devi usare un Form ...

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    141
    Scusa ma perdona l'ignoranza
    Io non capisco perchè se l'elemento "obj.Valore" punta già all'area di memoria in cui voglio memorizzare la proprietà, io devo anche usare "mValore" mer immagazzinare il dato...i 2 elementi non stanno puntando allo stesso dato?? E' come se salvassi il dato in "mValore" e poi attraverso "obj.Valore" andassi a pescare quanto sta scritto in "mValore"...mi sembra come se "mValore" fosse solo una variabile d'appoggio. Possibile che per ciascuna variabile che definisco debba anche definire un'ulteriore variabile per memorizzare i dati, mi sembra assurdo!! Inoltre quando poi crei codice e scrivi "obj.", compare l'elenco di scelta rapida (oppure anche dal visualizzatore oggetti si può vedere) nel quale vi è un numero di termini doppio rispetto alle proprità definite (compaiono "mValore" e "Valore"). Perchè negli oggetti già fatti di Excel compare solo ad esempio il termine "Valore" e non anche la variabile in cui si memorizzano i valori di proprietà

    Dato che lavoro con VBA io ho sempre scritto le Sub in un Modulo lanciandole col tasto del triangolino, non sento l'esigenza di usare un Form...
    Ho scritto in [B]Modulo:
    codice:
    Option Explicit
    Public i As Integer
    Public Righello As MioOggetto                   'QUESTO ME LO ACCETTA
    'Public withevents Righello As MioOggetto   'QUESTO QUELLO CHEDOVREBBE ACCETTARMI
    
    Public Sub DimensioneRighello()
        Set Righello = New MioOggetto
        Righello.Dimensione = 20
        Debug.Print Righello.Dimensione
        For i = 1 To 5
            Righello.Allunga (10)
            Debug.Print Righello.Dimensione
        Next i
    End Sub
    Public Sub TroppoLungo(sa As String)
        MsgBox sa
    End Sub
    Ho scritto in Modulo di Classe:
    codice:
    Option Explicit
    Public sa As String
    Public DimensioneLunghezza As Integer
    Public Event TroppoLungo(sa As String)
    Public Property Get Dimensione() As Integer
        Dimensione = DimensioneLunghezza
    End Property
    Public Property Let Dimensione(L As Integer)
        DimensioneLunghezza = L
        If DimensioneLunghezza >= 50 Then
            RaiseEvent TroppoLungo("TROPPO LUNGO")
        End If
    End Property
    Public Function Allunga(L)
        Dimensione = Dimensione + L
    End Function
    Se riuscissi a far digerire la dichiarazione con WithEvents secondo me dovrebbe funzionare.
    Perdonami, ma sto guardando su di una guida di VBA che però sull'argomento non mi sembra per nulla completa VVoVe:
    Come posso dire ad Alka che dovrebbe modificarmi il linguaggio nel titolo, mettendo VBA??
    La vita è come la scaletta di un pollaio: in salita, corta e piena di m***a!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.