none
Ejecutar EVENTO CLICK de MYBASE, desde otro control dentro de UN CONTROL DE USUARIO PERSONALIZADO

    Pregunta

  • De antemano gracias por las respuestas que me puedan dar.

    Tengo un Control Personalizado que e creado, y dentro de el coloque tres controles label, estos tienen sus respectivos atributos creados.
    Ahora este control lo creo en tiempo de ejecución, de acuerdo a un conjunto de datos se crearan los controles personalizados, lo hago con un FOR EACH, ahora cuando doi click en el control quiero me muestre un dato especifico, esto lo hago agregando un ADDHANDLER a un procedimiento como MANEJADOR, en su evento CLICK, con este código.

    Private sub Load
    For Each datos As DataRow In CONJUNTODEDATOS
                Dim control_pers As New FichaDatos.FichaDatos
                control_pers.Dato_1 = "datos_1"
                control_pers.Dato_2 = "datos_2"
                AddHandler control_pers.Click, AddressOf MOSTRADATOS
    Next
    end sub
    
    Private Sub MOSTRADATOS(sender As Object, e As EventArgs)
            Dim fich As FichaDatos.FichaDatos = CType(sender, FichaDatos.FichaDatos)
            MsgBox(fich.DATO_ID)
    End Sub

    Pero el problema es que cuando doi click sobre los LABELS no pasa nada, solo cuando doi click sobre una área vacía del CONTROL PERSONALIZADO, es decir donde no esten los LABELS(osea el lienzo de dibujo) funciona el código, y repito, no funciona cuando doi click sobre un LABEL. 

    En la Imagen se puede ver la parte coloreada de negro, solo esa parte es donde funciona el evento click, cuando doi click en esa parte es done el codigo funciona 


    Leer un msj que te da un ERROR te da la posibilidad de entender que esta pasando.! http://programacionx.net

    lunes, 23 de enero de 2017 1:08

Respuestas

  • "Miguel Nureña" escribió:

    > Tengo un Control Personalizado que e creado, y dentro de el coloque tres controles label, ...
    > ahora cuando doi click en el control quiero me muestre un dato especifico, esto lo hago
    > agregando un ADDHANDLER a un procedimiento como MANEJADOR, en su evento CLICK...
    >
    > Pero el problema es que cuando doi click sobre los LABELS no pasa nada, solo cuando doi
    > click sobre una área vacía del CONTROL PERSONALIZADO, es decir donde no esten los LABELS
    > (osea el lienzo de dibujo) funciona el código, y repito, no funciona cuando doi click
    > sobre un LABEL.
    >
    > En la Imagen se puede ver la parte coloreada de negro, solo esa parte es donde funciona
    > el evento click, cuando doi click en esa parte es done el codigo funciona

    Hola, Miguel:

    Si tu control personalizado llamado FichaDatos dispone de tres controles Label, tendrás que insertar dentro del propio control el controlador para el evento Click de cada uno de los controles Label, porque el controlador que estás instalando desde FUERA del control, es para el evento Click del propio control FichaDatos, no para sus controles hijos, de ahí que solo funcione cuando efectuas el clic dentro de "la parte coloreada de negro":

        Public Class FichaDatos

    Inherits UserControl Private Sub FichaDatos_Load(sender As Object, e As EventArgs) Handles FichaDatos.Load ' Instalar el controlador para el evento Click de los tres controles Label. AddHandler Label1.Click, AddressOf MostrarDatos AddHandler Label2.Click, AddressOf MostrarDatos AddHandler Label3.Click, AddressOf MostrarDatos End Sub Private Sub MostrarDatos(sender As Object, e As EventArgs) ' Referenciar el control Label que ha desencadenado el evento Dim lbl As Label = DirectCast(sender, Label) ' Mostramos el valor de la propiedad Text del control Label referenciado MessageBox.Show(lbl.Text) ' Mostramos el valor de la propiedad llamada DATO_ID MessageBox.Show(Me.DATO_ID) End Sub End Class

    Se comprende que DATO_ID es el nombre de una propiedad, campo o función existente en el propio control de usuario o clase llamada FichaDatos, referenciada en el código por la palabra clave Me (dónde actualmente se está ejecutando el código).

    Obviamente, si utilizas el mismo evento Click para los tres controles Label, el procedimiento MostrarDatos te mostrará el mismo valor que actualmente tenga la propiedad DATO_ID de la instancia actual de la clase, con independencia de en qué control Label se ha efectuado el clic con el ratón. Si deseas que te devuelva valores diferentes, tendrás que ejecutar el código necesario dentro del método MostrarDatos para que te muestre un valor u otro dependiendo de dónde se ha efectuado el clic. Pero eso ya lo dejo en tus manos. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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.




    miércoles, 25 de enero de 2017 9:58
    Moderador