Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB.NET2008] raiseevent da conversione c#

    ciao.
    ho un problema sul raiseevent dopo una conversione da C# a VB
    ho gia tentato un supporto in ASP.NET senza risultato e quindi provo qui sulla parte Clinet sperando in una soluzione

    ho questa funzione in C#
    codice:
    public partial class GoogleMapForASPNet : System.Web.UI.UserControl
    {
    
        public delegate void PushpinMovedHandler(string pID);
        public event PushpinMovedHandler PushpinMoved;
        // The method which fires the Event
    
        public void OnPushpinMoved(string pID)
        {
            // Check if there are any Subscribers
            if (PushpinMoved != null)
            {
                // Call the Event
                GoogleMapObject = (GoogleObject)System.Web.HttpContext.Current.Session["GOOGLE_MAP_OBJECT"];
                PushpinMoved(pID);
            }
        }
    ...
    ...
    dopo una conversione on line in VB, mi ritrovo questa funzione:


    codice:
    Partial Public Class GoogleMapForASPNet
        Inherits System.Web.UI.UserControl
    
        Public Delegate Sub PushpinMovedHandler(ByVal pID As String)
        Public Event PushpinMoved As PushpinMovedHandler
        ' The method which fires the Event
    
        Public Sub OnPushpinMoved(ByVal pID As String)
            ' Check if there are any Subscribers
            If PushpinMoved IsNot Nothing Then
                ' Call the Event
                GoogleMapObject = DirectCast(System.Web.HttpContext.Current.Session("GOOGLE_MAP_OBJECT"), GoogleObject)
                RaiseEvent PushpinMoved(pID)
            End If
        End Sub
    ...
    ...
    il sistema ri restituisce un errore nella riga If PushpinMoved

    codice:
    Public Event PushpinMoved(pID As String)' è un evento e non può essere chiamato direttamente. Utilizzare un'istruzione 'RaiseEvent' per generare un evento.
    da qui nonostante le ricerche in web non so come risolvere

    grazie
    Delfino Cobalto

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    E' semplice, elimina la riga in cui verifichi se l'evento non sia Nothing:

    codice:
       If PushpinMoved IsNot Nothing Then
       End if
    In VB.Net non c'è bisogno di verificare la dichiarazione di un'evento.

    IN VB.Net se non si dichiara l'evento non si scatena, in C# se non si dichiara si solleva invece un'eccezione, ecco il motivo per cui ha senso di esistere la riga di codice :

    codice:
     if (PushpinMoved != null)
            {
               
            }
    Per cui in C# avrò:

    codice:
     public partial class GoogleMapForASPNet 
        {  
           public delegate void SampleEventHandler(object sender);
           public event SampleEventHandler SampleEvent;
        
            public  void RaiseSampleEvent()
            {
                if (SampleEvent != null)
                {
                    SampleEvent(this);
                }      
            }
        }


    codice:
     public Form1()
            {
                InitializeComponent();
            }
             
            private void button1_Click(object sender, EventArgs e)
            {
              GoogleMapForASPNet myClassEvent = new GoogleMapForASPNet();
              myClassEvent.SampleEvent += new GoogleMapForASPNet.SampleEventHandler(myClassEvent_Done);
                myClassEvent.RaiseSampleEvent();
            }
    
            private void myClassEvent_Done(object sender)
            {
               Console.WriteLine("L'evento si è scatenato....");
            }
    Se non dichiari l'evento

    codice:
      myClassEvent.SampleEvent += new GoogleMapForASPNet.SampleEventHandler(myClassEvent_Done);
    otterrai un'eccezione al momento del richiamo dell'evento se prima non fai un controllo.

    In VB.net la stessa cosa si puo scrivere: con:

    codice:
    Public Class Class1
    
        Public Event SampleEvent(ByVal testo As String)
    
        Sub RaiseSampleEvent()
            RaiseEvent SampleEvent("test")
        End Sub
    
    End Class
    codice:
    Public Class Form1
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim myClassEvent As New Class1
            AddHandler myClassEvent.SampleEvent, AddressOf myClassEvent_Done
            myClassEvent.RaiseSampleEvent()
        End Sub
    
        Private Sub myClassEvent_Done(ByVal pID As String)
            Console.WriteLine("L'evento si è scatenato....")
        End Sub
    
    End Class
    Se non dichiari l'evento con

    codice:
     AddHandler myClassEvent.SampleEvent, AddressOf myClassEvent_Done
            myClassEvent.RaiseSampleEvent()
    l'evento semplicemente non si scatena.

    Sbagliare è umano, perseverare è diabolico.

  3. #3
    GRAZIE dell'infinita pazienza.
    ora o ben compreso il RaiseEvent. e credimi mi sarà molto utile ...

    ciao
    Delfino Cobalto

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.