none
Ayuda a corregir error en creación de eventos VB.Net RRS feed

  • Pregunta

  • Muchas gracias por la ayuda

    tengo estos 4 errores en estos 2 eventos que tengo en una clase, no se como solucionarlo por que soy principiante en desarrollo de clases.

    miércoles, 9 de diciembre de 2015 19:32

Respuestas

  • "RHCRD" escribió:

    > tengo estos 4 errores en estos 2 eventos que tengo en una clase,
    > no se como solucionarlo ...

    Hola:

    Observando el código que figura en la imagen que has publicado, lo único que te puedo decir es que no estás utilizando correctamente la instrucción RaiseEvent para desencadenar los eventos.

    Entiendo que lo que deseas es desencadenar ambos eventos en su correspondiente procedimiento OnXXX, que se comprende se encuentran implementados en alguna clase de tu proyecto.

    En principio, el primer evento lo tendrías que desencadenar de la siguiente manera:

        Public Event ValueChanged As EventHandler
    
        Private Sub OnValueChanged()
            ' Desencadenamos el evento.
            RaiseEvent ValueChanged(Me, New EventArgs)
        End Sub

    Y el segundo, de ésta otra:

        Public Event ValueInRangeChanged As EventHandler(Of ValueInRangeChangeEventArgs)
    
        Private Sub OnValueInRangeChanged(range As AGaugeRange, value As Single)
    
            If (Not range Is Nothing) Then
                ' Si el valor del parámetro range no es Nothing, creamos una
                ' instancia de la clase ValueInRangeChangeEventArgs.
                ' 
                Dim obj As New ValueInRangeChangeEventArgs(range, value, range.InRange)
    
                ' Desencadenamos el evento.
                RaiseEvent ValueInRangeChanged(Me, obj)
            End If
    
        End Sub

    Fíjate que al primer parámetro de los dos eventos le estamos pasando la palabra clave Me (tal cual figura en la imagen que has publicado), lo que significa que le estamos pasando el valor de la instancia actual de la clase donde se encuentren declarados los procedimientos OnValueChanged y OnValueInRangeChanged.

    Me imagino que en alguna parte de tu proyecto tendrás declaradas las clases AGaugeRange y ValueInRangeChangeEventArgs, cuestión ésta que la desconozco por completo, porque de no ser así, está bastante claro que no vas a poder compilar tu proyecto.

    > If (Not range Is Nothing) Then

    Observa que el evento ValueInRangeChanged solamente se desencadenará si el valor del parámetro range no es Nothing, porque de ser su valor Nothing, obtendrías una "bonita excepción" cuando intentes acceder a la propiedad InRange de la clase AGaugeRange. A parte que es no es muy normal que el procedimiento que se encarga de desencadenar un evento genere y lance a su vez un error, ya que de ésta acción se tendría que encargar el código cliente que llama a algún procedimiento OnXXX si así lo cree conveniente, o al menos así es como yo lo entiendo.

    > Dim obj As New ValueInRangeChangeEventArgs(range, value, range.InRange)

    No tengo el gusto de conocer la clase ValueInRangeChangeEventArgs, pero si el primer parámetro de su constructor New es del tipo AGaugeRange, digo yo que está de más el tercer parámetro, ya que el valor de su propiedad InRange se puede obtener a partir de la instancia especificada en el primer parámetro, salvo que el valor del tercer parámetro no tenga nada que ver con la clase AGaugeRange, claro está.

    Por último te comento que los procedimientos OnValueChanged y OnValueInRangeChanged están declarados como Private, lo que significa que dentro de la clase donde éstos se encuentran implementados, tendrás que tener otros procedimientos (Property, Sub, Function) que sean los que llamen a dichos procedimientos, porque si no es así, va a ser complicado que se puedan desencadenar los eventos ValueChanged y OnValueInRangeChanged.

    > ...  por que soy principiante en desarrollo de clases.

    Si es así, no estaría de más que estudiases cómo se implementan los eventos en Visual Basic .NET:

    Eventos (Visual Basic)

    Consulta también los enlaces que aparecen al final de la dirección web indicada.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 10 de diciembre de 2015 10:18
    Moderador

Todas las respuestas

  • "RHCRD" escribió:

    > tengo estos 4 errores en estos 2 eventos que tengo en una clase,
    > no se como solucionarlo ...

    Hola:

    Observando el código que figura en la imagen que has publicado, lo único que te puedo decir es que no estás utilizando correctamente la instrucción RaiseEvent para desencadenar los eventos.

    Entiendo que lo que deseas es desencadenar ambos eventos en su correspondiente procedimiento OnXXX, que se comprende se encuentran implementados en alguna clase de tu proyecto.

    En principio, el primer evento lo tendrías que desencadenar de la siguiente manera:

        Public Event ValueChanged As EventHandler
    
        Private Sub OnValueChanged()
            ' Desencadenamos el evento.
            RaiseEvent ValueChanged(Me, New EventArgs)
        End Sub

    Y el segundo, de ésta otra:

        Public Event ValueInRangeChanged As EventHandler(Of ValueInRangeChangeEventArgs)
    
        Private Sub OnValueInRangeChanged(range As AGaugeRange, value As Single)
    
            If (Not range Is Nothing) Then
                ' Si el valor del parámetro range no es Nothing, creamos una
                ' instancia de la clase ValueInRangeChangeEventArgs.
                ' 
                Dim obj As New ValueInRangeChangeEventArgs(range, value, range.InRange)
    
                ' Desencadenamos el evento.
                RaiseEvent ValueInRangeChanged(Me, obj)
            End If
    
        End Sub

    Fíjate que al primer parámetro de los dos eventos le estamos pasando la palabra clave Me (tal cual figura en la imagen que has publicado), lo que significa que le estamos pasando el valor de la instancia actual de la clase donde se encuentren declarados los procedimientos OnValueChanged y OnValueInRangeChanged.

    Me imagino que en alguna parte de tu proyecto tendrás declaradas las clases AGaugeRange y ValueInRangeChangeEventArgs, cuestión ésta que la desconozco por completo, porque de no ser así, está bastante claro que no vas a poder compilar tu proyecto.

    > If (Not range Is Nothing) Then

    Observa que el evento ValueInRangeChanged solamente se desencadenará si el valor del parámetro range no es Nothing, porque de ser su valor Nothing, obtendrías una "bonita excepción" cuando intentes acceder a la propiedad InRange de la clase AGaugeRange. A parte que es no es muy normal que el procedimiento que se encarga de desencadenar un evento genere y lance a su vez un error, ya que de ésta acción se tendría que encargar el código cliente que llama a algún procedimiento OnXXX si así lo cree conveniente, o al menos así es como yo lo entiendo.

    > Dim obj As New ValueInRangeChangeEventArgs(range, value, range.InRange)

    No tengo el gusto de conocer la clase ValueInRangeChangeEventArgs, pero si el primer parámetro de su constructor New es del tipo AGaugeRange, digo yo que está de más el tercer parámetro, ya que el valor de su propiedad InRange se puede obtener a partir de la instancia especificada en el primer parámetro, salvo que el valor del tercer parámetro no tenga nada que ver con la clase AGaugeRange, claro está.

    Por último te comento que los procedimientos OnValueChanged y OnValueInRangeChanged están declarados como Private, lo que significa que dentro de la clase donde éstos se encuentran implementados, tendrás que tener otros procedimientos (Property, Sub, Function) que sean los que llamen a dichos procedimientos, porque si no es así, va a ser complicado que se puedan desencadenar los eventos ValueChanged y OnValueInRangeChanged.

    > ...  por que soy principiante en desarrollo de clases.

    Si es así, no estaría de más que estudiases cómo se implementan los eventos en Visual Basic .NET:

    Eventos (Visual Basic)

    Consulta también los enlaces que aparecen al final de la dirección web indicada.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 10 de diciembre de 2015 10:18
    Moderador
  • muchas gracias por tomarte tanto tiempo para responder a mi pregunta, me ah servido de mucho.
    lunes, 14 de diciembre de 2015 17:41