Errore definizione evento in una classe - Visual Basic Tips and Tricks - Forum - Visual Basic - VB.NET
Errore definizione evento in una classe
Ultimo messaggio: 15 ago 2019 07:33 di alip1. 7 Risposte.
Avatar
alip1
Messaggi: 103
Iscritto dal: 30 apr 2012 09:34
Utente
Utente

14 ago 2019 10:03
In modulo class (cdsTBCounter) ho definito tra l'altro il seguente evento esposto dalla classe:

Public Event NewBarCode(stBarCode As String)

In un form ho definito l'oggetto:

Dim WithEvents csNewBC As cdsTBCounter

e quindi intercetto l'evento esposto con:

Private Sub csNewBC_NewBarCode(stBarCode As String) Handles csNewBC.NewBarCode
txtDataCode.Text = stBarCode
gstKeyUsrCurrent = cboKey.Text
CopyCodeToClipBoard()
cmdCopy.Enabled = True
WriteUserKey(gstKeyUsrCurrent, "")
End Sub

 

Code analysis mi da il seguente warning:

CA1009Declare event handlers correctlyDeclare the second parameter of 'cdsTBCounter.NewBarCodeEventHandler' as an EventArgs, or an instance of a type that extends EventArgs, named 'e'.QB4IVAcdsTBCounter.vb27

Ancora prima mi diceva di aggiungere l'handles... ora mi dice così


Ma in sostanza cosa dovrei fare??


Negli esempi di microsoft.docs... mi sembra che gli eventi siano dichiarati come l'ho dichiarato io ed anche l'aggancio dell'evento é simile...  anche nei vari testi sono identici..


L'applicazione sembra funzionare in debug. In effetti mi sembra di capire che sia solo un Warning e non proprio un errore... Però anche se in debug funziona, quando vado ad effettuare il build in release allora mi da errore e non fa il build..

Allora vorrei capire ora cosa fare perché sparisca questo Warning. e come in una classe in vb.net un evento vada dichiarato e poi intercettato...

Grazie come sempre

    Avatar
    SirJo
    Messaggi: 2432
    Iscritto dal: 30 apr 2012 08:43
    Utente
    Utente

    14 ago 2019 11:03
    mi sembra che il messaggio sia chiaro

    quando definisci un evento, come parametro deve esserci il gestore dell'evento.

    Questo evento chi lo scatena ???
      Avatar
      alip1
      Messaggi: 103
      Iscritto dal: 30 apr 2012 09:34
      Utente
      Utente

      14 ago 2019 14:47
      Inviato da alip1 su 14 ago 2019 15:47
      Inviato da SirJo su 14 ago 2019 12:03
      mi sembra che il messaggio sia chiaro

      quando definisci un evento, come parametro deve esserci il gestore dell'evento.
      cosa vuoi dire?
      l'evento é dichiarato come detto:  public  event 

      Questo evento chi lo scatena ???
      L'evento viene scatenato nell'oggetto: cdsNewCode
      con RaiseEvent


        Avatar
        alip1
        Messaggi: 103
        Iscritto dal: 30 apr 2012 09:34
        Utente
        Utente

        14 ago 2019 15:15
        Inviato da SirJo su 14 ago 2019 12:03
        mi sembra che il messaggio sia chiaro

        quando definisci un evento, come parametro deve esserci il gestore dell'evento.

        L'evento é definito nella classe cdsTBCounter

        così: 
        Public Event NewBarCode(stBarCode As String)
        (come é riportato in tanti manuali)!!

        Quindi in un form viene definito l'oggetto:

        Dim WithEvents csNewBC As cdsTBCounter 
        e nello stesso form intercetto l'evento con:
        Private Sub csNewBC_NewBarCode(stBarCode As String) Handles csNewBC.NewBarCode
        txtDataCode.Text = stBarCode
        gstKeyUsrCurrent = cboKey.Text
        CopyCodeToClipBoard()
        cmdCopy.Enabled = True
        WriteUserKey(gstKeyUsrCurrent, "")
        End Sub
        (Alcuni testi non indicano nemmeno che occorre aggiungere Handles...)
        Questo evento chi lo scatena ???

           l'evento viene scatenato in una routine della classe così:

           RaiseEvent NewBarCode(stBarCodeVal) in cui stbarCodeVal="PO0120" o valore simile

         

         Spero di essere stato chiaro... e non capisco cosa intendi  dire con: un parametro deve essere il gestore dell'evento??

         

        PS.: ritiene nulla l'altra risposta mié partita senza averla completata. Scusa ,Graziee Buon Ferragosto

         

          Avatar
          SirJo
          Messaggi: 2432
          Iscritto dal: 30 apr 2012 08:43
          Utente
          Utente

          14 ago 2019 20:08
          Inviato da SirJo su 14 ago 2019 21:08

          > un parametro deve essere il gestore dell'evento

          questa cosa non la dico io, lo dice l'errore che tu hai riportato, e cioè:

          Declare the second parameter of 'cdsTBCounter.NewBarCodeEventHandler' as an EventArgs

          Prova con:
          Public Event NewBarCode(ByVal stBarCode As Object,  ByVal e As EventArgs)

          Private Sub csNewBC_NewBarCode(ByVal stBarCode As Object, ByVal e As EventArgs) Handles csNewBC.NewBarCode

          RaiseEvent NewBarCode(stBarCodeVal, EventArgs.Empty)
            Avatar
            alip1
            Messaggi: 103
            Iscritto dal: 30 apr 2012 09:34
            Utente
            Utente

            14 ago 2019 21:03
            Ok grazie ho capito.. strano che tanti testi dichiarano l'evento come fatto da me...
              Avatar
              SirJo
              Messaggi: 2432
              Iscritto dal: 30 apr 2012 08:43
              Utente
              Utente

              15 ago 2019 06:49
              Sinceramente anche a me è parso molto strano il tutto.

              Tienici informati perchè la cosa interessa



                Avatar
                alip1
                Messaggi: 103
                Iscritto dal: 30 apr 2012 09:34
                Utente
                Utente

                15 ago 2019 07:33
                Ok grazie
                  ---