none
Detectar "actividad" en el formulario

    Pregunta

  • Hola amigos:

    Lo que persigo es lo que dice el tituo, pero sin que haya habido cambios en el formulario forzosamernte, es decir detectar simplemente si se ha pulsado sobre CUALQUIER control de formulario para ejecutar unas lineas de codigo.

    Dicho de otro modo: ¿Tiene el formulario ( o aguna forma de hacerlo) algun evento que se ejecute cuando haya las mas minima actividad sobre el?

    Espero que me haya hecho entender

    domingo, 12 de febrero de 2017 14:35

Respuestas

  • Hola DiegC,

    Pienso que deberías usar el evento Shown del formulario para recorrer los controles y asignar el mismo evento Enter (el cual se produce cual el control se convierte en el control activo del formulario valga la redundancia). Además de establecer el control activo como 'Nothing'.

    Por lo que sería algo así :

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    
        'Asignamos nulo al control activo
        Me.ActiveControl = Nothing
    
        For Each c As Control In Me.Controls
            AddHandler c.Enter, AddressOf changeActivo
        Next
    End Sub

    Y el método changeActivo :

    Private Sub changeActivo(sender As Object, e As EventArgs)
        MessageBox.Show("Se detectó actividad en el formulario")
        'Hacer las operaciones correspondientes ...
    End Sub

    Ya que el control activo es nulo, si presionar una tecla, da click o hace alguna acción, obtendría un control como  'activo' el cual ejecutaría el método enlazado.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 12 de febrero de 2017 16:09
  • Podrías usar un bucle para conectar el evento Clic de todos los controles del formulario a un mismo manejador de eventos, y dentro de ese manejador poner "true" en una variable booleana para indicar que existió actividad.
    domingo, 12 de febrero de 2017 14:56

Todas las respuestas

  • Podrías usar un bucle para conectar el evento Clic de todos los controles del formulario a un mismo manejador de eventos, y dentro de ese manejador poner "true" en una variable booleana para indicar que existió actividad.
    domingo, 12 de febrero de 2017 14:56
  • Hola Alberto.

    Confieso que no sabria como hacer eso. 

    Yo habia pensado en un for each que recorriera todos los controles y detectase agun cambio de estado, pero ¿donde pongo ese bucle? He probado todos los eventos del form y ninguno hace lo que busco, que seria lo ideal.

    ¿Puedes darme alguna indicacion de como hacer lo que dices?

    Gracias y hasta siempre

    domingo, 12 de febrero de 2017 15:53
  • Hola DiegC,

    Pienso que deberías usar el evento Shown del formulario para recorrer los controles y asignar el mismo evento Enter (el cual se produce cual el control se convierte en el control activo del formulario valga la redundancia). Además de establecer el control activo como 'Nothing'.

    Por lo que sería algo así :

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    
        'Asignamos nulo al control activo
        Me.ActiveControl = Nothing
    
        For Each c As Control In Me.Controls
            AddHandler c.Enter, AddressOf changeActivo
        Next
    End Sub

    Y el método changeActivo :

    Private Sub changeActivo(sender As Object, e As EventArgs)
        MessageBox.Show("Se detectó actividad en el formulario")
        'Hacer las operaciones correspondientes ...
    End Sub

    Ya que el control activo es nulo, si presionar una tecla, da click o hace alguna acción, obtendría un control como  'activo' el cual ejecutaría el método enlazado.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 12 de febrero de 2017 16:09
  • Efectivamente Joel. Hace exactamente lo que quiero y con un par de lineas de codigo.

    Gracias a ambos por contestar.

    Larga vida al foro.

    domingo, 12 de febrero de 2017 16:52