none
[Ayuda] Pasar este código a un modulo RRS feed

  • Pregunta

  • Hola amigos,

    En vez de estar declarando un timer en cada formulario con este código, cómo podría pasarlo a un modulo y cada vez que yo abra un formulario llame a este modulo para ejecutar este efecto?

        Friend WithEvents timFadeIn As New Timer With {.Interval = 30}
    
        Private Sub timFadeIn_Tick(Tips As Object, e As EventArgs) Handles timFadeIn.Tick
    
            If Opacity < 1 Then
                Opacity += 0.2
            Else
                timFadeIn.Enabled = False
            End If
    
        End Sub

    sábado, 6 de mayo de 2017 20:12

Respuestas

  • No puedes hacerlo en un módulo salvo que quieras que todos los forms compartan EL MISMO Timer y a todos se les dispare el evento simultáneamente. La razón es que el módulo se compila como una clase estática (Shared), por lo que existe una única instancia de los objetos declarados en su interior. Sin embargo, seguramente tú quieres una instancia distinta por cada Form, lo cual requiere que declares el Timer dentro de la clase del Form, para que se instancie junto con cada instancia del Form.

    Aunque la variable timFadeIn no puede estar en el Module (salvo que quieras compartirla), Sí que sería factible compartir el manejador del evento. Pero te resultará muy complicado recuperar desde ahí el Form llamante para cambiar el Opacity de ese Form. Podrías hacerlo tomando la instancia a través del Sender y usando alguna propiedad del timer para buscar su contenedor. O podrías hacerlo conectando el manejador a través de un "closure".

    Pero eso te va a quedar muy complicado. Es preferible que en lugar de un Module uses un Class y que dentro del Class metas el Timer y el manejador del Tick. Después ese class lo instancias desde todos los formularios en los que lo requieras, y le pasas el Me a través del constructor para que sepa cuál es el form al que le tiene que cambiar el Opacity.

    Eso funcionaría bien, pero hay otra opción todavía más elegante. Crea una clase heredada de Form y mete dentro el Timer y su manejador. Después, en todos tus formularios, cambia la herencia de Form (al principio del fuente de la clase) por una herencia del formulario que acabas de crear (el cual a su vez hereda de Form, por lo que no se "rompe" nada en tus formularios). Eso hace que todos ellos compartan ese Timer (y su manejador) que están en la clase madre.

    domingo, 7 de mayo de 2017 6:40