vb.net - visual - vb net database access
El evento Button.Click no se activa después del evento TextBox.Leave (3)
Utilizo el siguiente código para verificar si el texto en un TextBox fue cambiado y solicito guardar los cambios:
Private TBoxTxtBefore As String = String.Empty
Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
Try
TBoxTxtBefore = CType(sender, TextBox).Text
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
Try
If CType(sender, TextBox).Text <> TBoxTxtBefore Then
Dim SN As MsgBoxResult = MsgBox("Save changes?", vbYesNo, "Save Changes")
If SN = vbYes Then Btn_SaveChanges.PerformClick()
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Pero cuando hago clic en un botón (por ejemplo, button1
) mientras el cursor está dentro de TextBox1
, solo TextBox1.Leave
evento TextBox1.Leave
.
¿Cómo puedo hacer que Button?.click
event raise después de TextBox1.Leave
event?
¿Cómo puedo hacer que button1.click event raise después de TextBox1.Leave event?
Si TextBox1 tiene el foco y haces clic en un botón, el evento de permiso se activará antes del evento click. Para probar haga clic en Texbox1, luego haga clic en Button1.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Debug.WriteLine("B1C")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Debug.WriteLine("B2C")
End Sub
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
Debug.WriteLine("TBL")
Button2.PerformClick()
End Sub
Intenta aclarar tu pregunta por favor.
editar: Esto recrea el problema que creo que tienes
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Debug.WriteLine("B1C")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Debug.WriteLine("B2C")
End Sub
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
MessageBox.Show("FOO")
Debug.WriteLine("TBL")
Button2.PerformClick()
End Sub
Realizó algunas búsquedas y descubrió que el cuadro Mensaje causa la pérdida de eventos de foco pendientes.
Gracias a los consejos de dbasnett, pude obtener el nombre del control que activó el evento Leave, por lo tanto, para llamarlo (si es un botón) después de que se mostró el cuadro de mensaje:
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
Try
Dim FiringCtrl As Control = Me.Activecontrol
If CType(sender, TextBox).Text <> TBoxTxtBefore _
AndAlso FiringCtrl.Name <> "Btn_SaveChanges" Then
Dim SN As MsgBoxResult = MsgBox("Save changes?", vbYesNo, "Save Changes")
If SN = vbYes Then Btn_SaveChanges.PerformClick()
If TypeOf FiringCtrl Is Button Then
DirectCast(FiringCtrl, Button).PerformClick()
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
De todos modos Plutonix me mostró una mejor solución aquí
Puede llamar eventos múltiples uno después del otro. Su evento TextBox1_Leave podría desencadenar el evento Button1_click.
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
''Take the control to another sub. Pass the sender control and the event details as arguments
Call Button1_Click(sender,e)
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
''Do your stuff here
End Sub
Espero que esto ayude.