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

    trasformazione c# in vb

    in rete to trovato un codice da inserire in un modulo per personalizzare il Gridview ma scritto in c#
    un po dai coventitori automatici un po a mano sto cercando di tradurlo in VB.

    questo è il codice una parte del codice origine
    [ToolboxData("<{0}:HWGridView runat=server></{0}:HWGridView>")]
    public class HWGridView : GridView
    {

    TextBox m_txtPageNo = null;
    Hashtable m_txtFilter = new Hashtable();
    Hashtable m_ddlFilter = new Hashtable();

    private static readonly object EventFilterCommand = new object();
    // Events
    [Category("Extend GridView Events"), Description("ExtededGridView_OnFilterCommand")]
    public event EventHandler FilterCommand
    {
    add
    {
    base.Events.AddHandler(EventFilterCommand, value);
    }
    remove
    {
    base.Events.RemoveHandler(EventFilterCommand, value);
    }
    }

    public HWGridView()
    {
    PagerSettings.Position = PagerPosition.TopAndBottom;
    }

    questo è il risultato della conversione

    <ToolboxData("<{0}:HWGridView runat=server></{0}:HWGridView>")> Public Class HWGridView
    Inherits GridView

    Private m_txtPageNo As TextBox = Nothing
    Private m_txtFilter As New Hashtable()
    Private m_ddlFilter As New Hashtable()

    Private Shared ReadOnly EventFilterCommand As New Object()

    <Category("Extend GridView Events"), Description("ExtededGridView_OnFilterCommand")> _
    Public Custom Event FilterCommand As EventHandler
    AddHandler(ByVal value As EventHandler)
    MyBase.Events.[AddHandler](EventFilterCommand, value)
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
    MyBase.Events.[RemoveHandler](EventFilterCommand, value)
    End RemoveHandler
    End Event

    Public Sub New()
    PagerSettings.Position = PagerPosition.TopAndBottom
    End Sub
    il problema è
    su questa parte di codice dove mi viene segnalato
    Definizione di 'RaiseEvent' mancante per l'evento 'FilterCommand'.

    <Category("Extend GridView Events"), Description("ExtededGridView_OnFilterCommand")> _
    Public Custom Event FilterCommand As EventHandler
    qual'e il codice corretto?

    grazie
    Delfino Cobalto

  2. #2
    Utente di HTML.it L'avatar di Cimp
    Registrato dal
    Nov 2006
    Messaggi
    28
    qualcosa del genere:
    codice:
        <Category("Extend GridView Events"), Description("ExtededGridView_OnFilterCommand")> _
        Public Custom Event FilterCommand As EventHandler
            AddHandler(ByVal value As EventHandler)
                MyBase.Events.[AddHandler](EventFilterCommand, value)
            End AddHandler
            RemoveHandler(ByVal value As EventHandler)
                MyBase.Events.[RemoveHandler](EventFilterCommand, value)
            End RemoveHandler
    
                  
            RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
    
            End RaiseEvent
            
        End Event

  3. #3
    Grazie l'errore non mi è piu segnalato
    dovrei convertire quet'ultimo codice.


    protected virtual void OnFilterCommand(FilterCommandEventArgs e)
    {
    EventHandler handler = (EventHandler)base.Events[EventFilterCommand];
    if (handler != null)
    {
    handler(this, e);
    }
    }
    la coversione è stata

    Protected Overridable Sub OnFilterCommand(ByVal e As FilterCommandEventArgs)
    Dim handler As EventHandler = DirectCast(MyBase.Events(EventFilterCommand), EventHandler)
    RaiseEvent handler(Me, e)
    End Sub
    ma ho il seguente errore 'handler' non è un evento di 'HWControls.HWGridView'. .

    dovrei usare anche qui un codice simile a
    RaiseEvent(ByVal Handler oppure sender As Object, ByVal e As EventArgs)

    Ho notato che nella conversione una codizione If del c# non è stata riportata in VB.
    e che questo dipende dal tipo di sintassi del linguaggio usato ma potresti spiegarmi il funzionamento di RaiseEvent ed EventHandler. Una spiegazione semplice visto la mia inesperienza a riguardo.

    Grazie
    Delfino Cobalto

  4. #4
    Utente di HTML.it L'avatar di Cimp
    Registrato dal
    Nov 2006
    Messaggi
    28
    Se non sbaglio ti serve in realtà qualcosa di più semplice:
    codice:
    Protected Overridable Sub OnFilterCommand(ByVal e As FilterCommandEventArgs)
      RaiseEvent FilterCommand (Me, e)
    End Sub
    in pratica, il RaiseEvent NomeEvento usato qui chiama (solleva) l'evento FilterCommand

    mentre il RasieEvent... End RaiseEvent di prima definiva la signature del raisevent che usi qui dove infatti ora passi un Object (=me) e un eventargs (e)
    attento: se non l'hai fatto da nessuna parte, ti manca la classe
    FilterCommandEventArgs che deve ereditare da eventArgs, e poi
    dovresti cambiare la signature di RasieEvent... End RaiseEvent
    per mettere quel tipo di parametro come e (anzichè un generico
    EventArgs).

    EventHandler
    alla fine è quel che sta dietro gli eventi (e anche alla possibilità di chiamare una funzione che stia altrove senza neanche sapere dove sta o come si chiami davvero, e anche alle callback in genere). Non te ne so dare una spiegazione semplice, per cui ho preso direttamente da msdn
    http://msdn.microsoft.com/it-it/libr...nthandler.aspx
    "delegato dell'evento che connette un evento al relativo gestore. Per generare un evento, sono necessari due elementi:
    * Delegato che identifica il metodo che fornisce la risposta all'evento.
    * Una classe che contenga i dati dell'evento.
    Un delegato è un tipo che definisce una firma, ovvero il tipo del valore restituito e i tipi relativi all'elenco dei parametri di un metodo. Il tipo delegato può essere utilizzato per dichiarare una variabile che può fare riferimento a qualsiasi metodo con la stessa firma del delegato.

    La firma standard di un delegato del gestore eventi definisce un metodo che non restituisce alcun valore. Il primo parametro di tale metodo è di tipo Object e fa riferimento all'istanza che genera l'evento, mentre il secondo parametro è derivato dal tipo EventArgs e contiene i dati dell'evento. Se l'evento non genera dati dell'evento, il secondo parametro è semplicemente un'istanza di EventArgs. In caso contrario, il secondo parametro è un tipo personalizzato derivato da EventArgs e contiene i campi e le proprietà in cui inserire i dati dell'evento.

    EventHandler è un delegato predefinito che rappresenta in modo specifico un metodo di gestione eventi per un evento che non genera dati. Se l'evento genera dati, è necessario fornire un tipo personalizzato di dati dell'evento e creare un delegato dove il tipo del secondo parametro è rappresentato dal tipo personalizzato, oppure utilizzare la classe di delegato generica EventHandler<(Of <(TEventArgs>)>) e sostituire il tipo personalizzato al parametro del tipo generico.

    Per associare l'evento al metodo di gestione dell'evento, aggiungere all'evento un'istanza del delegato. Il gestore eventi viene richiamato ogni qualvolta si verifica l'evento, a meno che non venga rimosso il delegato. "

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.