none
Bloquear eventos hasta cargar datos en un control RRS feed

  • Pregunta

  • Hola amigos:

    Estoy haciendo una aplicación en Visual Basic 2019, y tengo el problema que -en los listBox, Combobox, o datagridview- cuando estoy cargando datos por cualquier método, sea datasource o manualmente, se me activan los controles de eventos, por ejemplo, SelectedIndexChange, o Dgv.SelectionChanged. Estos eventos me resultan necesarios de usar, por lo que no puedo evitarlos, pero deseo inhabilitarlos hasta que se carguemn todos los datos. 

    He probado cargar una variable boolean, pero si bien funciona correctamente, no me parece lo más elaborado técnicamente.

    Deseo conocer el comando que me permita paralizar el llamado a estos eventos, hasta tanto sean cargados los datos, ya que en muchos casos me genera otros problemas. 

    ¿Hay un comando que me permita suspender la ejecución de estos eventos?

    Gracias de antemano.


    Juan Carlos

    martes, 13 de octubre de 2020 3:13

Respuestas

  • Hola:

    Cuando estas cargando datos, deshabilita esos eventos y cuando finaliza la carga los vuelves a habilitar
    Te expongo un ejemplo de codigo

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            lP_QuitarHandle()
            Dim loFila As DataGridViewRow = DataGridView1.CurrentRow()
            Me.txtIdDepartamento.Text = loFila.Cells("ID_DEPARTAMENTO").Value.ToString
            Me.txtCodigo.Text = loFila.Cells("COD_DEPARTAMENTO").Value.ToString
            Me.txtDescripcion.Text = loFila.Cells("DESCRIPCION").Value.ToString
            Me.txtCodigo.Focus()
            mbSwCambio = False
            lP_PonerHandle()
        End Sub


        Private Sub lP_QuitarHandle()
            RemoveHandler txtDescripcion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtCodigo.TextChanged, AddressOf lP_Cambio
        End Sub

        Private Sub lP_PonerHandle()
            AddHandler txtDescripcion.TextChanged, AddressOf lP_Cambio
            AddHandler txtCodigo.TextChanged, AddressOf lP_Cambio
        End Sub

        Private Sub lP_Cambio(ByVal sender As System.Object, ByVal e As System.EventArgs)
            mbSwCambio = True
        End Sub


    Un saludo desde Bilbo
    Carlos
    martes, 13 de octubre de 2020 7:47

Todas las respuestas

  • Hola:

    Cuando estas cargando datos, deshabilita esos eventos y cuando finaliza la carga los vuelves a habilitar
    Te expongo un ejemplo de codigo

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            If e.RowIndex = -1 Then
                Return
            End If
            lP_QuitarHandle()
            Dim loFila As DataGridViewRow = DataGridView1.CurrentRow()
            Me.txtIdDepartamento.Text = loFila.Cells("ID_DEPARTAMENTO").Value.ToString
            Me.txtCodigo.Text = loFila.Cells("COD_DEPARTAMENTO").Value.ToString
            Me.txtDescripcion.Text = loFila.Cells("DESCRIPCION").Value.ToString
            Me.txtCodigo.Focus()
            mbSwCambio = False
            lP_PonerHandle()
        End Sub


        Private Sub lP_QuitarHandle()
            RemoveHandler txtDescripcion.TextChanged, AddressOf lP_Cambio
            RemoveHandler txtCodigo.TextChanged, AddressOf lP_Cambio
        End Sub

        Private Sub lP_PonerHandle()
            AddHandler txtDescripcion.TextChanged, AddressOf lP_Cambio
            AddHandler txtCodigo.TextChanged, AddressOf lP_Cambio
        End Sub

        Private Sub lP_Cambio(ByVal sender As System.Object, ByVal e As System.EventArgs)
            mbSwCambio = True
        End Sub


    Un saludo desde Bilbo
    Carlos
    martes, 13 de octubre de 2020 7:47
  • Hola Carlos:

    Gracias por responder. Lo que me temía, no hay una función tal como suspendlayout o resumelayout, por lo que crear variable pública que avise que se encuentra cargando, es la solución más viable.

    Gracias Carlos


    Juan Carlos

    martes, 13 de octubre de 2020 12:12
  • Hola,

     

    gracias por confirmar que encontraste una respuesta a tu pregunta.

     

    Saludos cordiales

     

    Gabriel Castro

    martes, 13 de octubre de 2020 13:20
    Moderador