none
¿Cómo puedo hacer para acceder a un control en un procedimiento que es llamado desde un formulario (propietario del control) y desde un módulo? RRS feed

  • Pregunta

  • Necesito usar el procediento en un módulo y en un formulario. El procedimiento hace referencia a controles de ese mismo formulario desde donde lo llamo. Ojalá lo haya explicado con claridad.

    -------------------

    Resumiendo:

    Formulario1 ==> Llama al procedimientoX que hace referencia a controles de ese Formulario1.

    Modulo1 ==> Alberga el procedimientoX (usado en Formulario1 y Modulo2)

    Modulo2 ==> Llama al  procediientoX (por tanto hace también referencia a controles de Formulario1)

    -------------------

    Lo que quiero saber es cómo le paso el parámetro al procedimiento (que haga referencia al formulario) cuando lo llamo desde el Módulo2 y desde el control (entiendo que en el formulario le pasaría Me pero en el módulo?)


    • Editado James-2016 sábado, 2 de abril de 2016 1:14
    sábado, 2 de abril de 2016 1:14

Respuestas

  • Hola James,

    al método del Modulo2 tendrías que pasar también la instancia del formulario a utilizar:

    ' Método Modulo1
    Public Shared Sub MetodoModulo1(formulario As Form)
       ' Tratamiento de los controles del formulario
    End Sub
    
    
    ' Método Modulo2
    Public Shared Sub MetodoModulo2(formulario AS Form)
       ' Tratamiento método módulo 2
       MetodoModulo1(formulario)
    End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta James-2016 sábado, 2 de abril de 2016 8:17
    sábado, 2 de abril de 2016 7:04

Todas las respuestas

  • El procedimiento X tendría que recibir un parámetro del tipo Formulario1. Al llamarlo desde una instancia del Formulario1, le pasarías el Me, que representa precisamente dicha instancia.

    Al llamarlo desde el Formulario2, tienes que pasarle la instancia del Formulario1, y ahora ya no existe ningún truco automático (como el Me) para obtener dicha instancia. Necesariamente tendrás que conservar la instancia guardándola desde el sitio de tu programa en el que instancies el Formurario1, dentro de alguna variable cuya visibilidad la haga accesible al Formulario2 (podría ser una variable Public Shared en una clase, o una variable en un módulo).

    Dicho eso, esta forma de trabajar es bastante "chapucera", pues introduce interdependencias entre los objetos que a la larga harán que la aplicación sea difícil de mantener. Sería preferible replantearse este diseño para que no ocurran este tipo de circuitos en los que un módulo o un formulario deban "conocer" el contenido interno de otro formulario distinto. Podría definirse una Interfaz, o un sistema de eventos para actualizar un formulario desde el otro o desde un módulo, en lugar de acceder desde fuera a los controles internos.

    sábado, 2 de abril de 2016 7:03
  • Hola James,

    al método del Modulo2 tendrías que pasar también la instancia del formulario a utilizar:

    ' Método Modulo1
    Public Shared Sub MetodoModulo1(formulario As Form)
       ' Tratamiento de los controles del formulario
    End Sub
    
    
    ' Método Modulo2
    Public Shared Sub MetodoModulo2(formulario AS Form)
       ' Tratamiento método módulo 2
       MetodoModulo1(formulario)
    End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta James-2016 sábado, 2 de abril de 2016 8:17
    sábado, 2 de abril de 2016 7:04
  • Hola, no hago referencia a un Formulario 2 como indicas. La interacción como puse en la pregunta es entre dos módulos y un solo formulario.

    De todos modos gracias por la explicación, tendré en cuenta lo que dices.

    sábado, 2 de abril de 2016 8:16
  • Hola, muchas gracias.
    sábado, 2 de abril de 2016 8:17