e.Cancelar los disparos pero otro código también se dispara cuando ocurre un evento de clic

Un formulario tiene muchos botones. Uno de esos botones contiene código para actualizar TableAdapterManager. Uno de los muchos controles TextBox tiene código en un controlador de eventos Validating. Hay un código para asegurarse de que un número de teléfono de EE. UU. esté formateado correctamente.

Si el usuario sale del cuadro de texto, el código de validación funciona perfectamente y muestra un mensaje al usuario si el número de teléfono no tiene el formato adecuado y el foco está en el cuadro de texto infractor.

Si el usuario hace clic en un botón que tiene código para actualizar TableAdapterManager, se activa el código de validación, pero en lugar de permanecer enfocado en el cuadro de texto infractor, también se activa el código en el controlador de clic del botón.

Me gustaría detener el disparo del código del botón.

Aquí está el código para el evento Validating del TextBox:

Private Sub TextBoxPrimaryPhone_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBoxPrimaryPhone.Validating

    ' Make sure the phone is formatted correctly.
    '--------------------------------------------
    If PhoneFormat(TextBoxPrimaryPhone.Text) = "Fix Phone Number" Then

        ' Alert the user.
        '----------------
        MessageBox.Show("Please enter a 7 or 10 digit phone number.", _
                        "Entry Error", _
                        MessageBoxButtons.OK, _
                        MessageBoxIcon.Error)

        e.Cancel = True
    Else

        ' Format according to the length of the phone number entered by the user.
        '------------------------------------------------------------------------
        TextBoxPrimaryPhone.Text = PhoneFormat(TextBoxPrimaryPhone.Text)
    End If
End Sub

¿Qué codificación adicional debo incluir para que el foco permanezca en el cuadro de texto?

preguntado el 09 de marzo de 12 a las 16:03

1 Respuestas

Después de llamar a e.Cancel = True, haga esto para establecer el foco del cuadro de texto infractor:

TextBoxPrimaryPhone.Focus()

En su controlador de eventos de clic de botón, puede hacer esto:

    TextBoxPrimaryPhone_Validating(sender, New System.ComponentModel.CancelEventArgs)

    If Not TextBoxPrimaryPhone.Focused Then

        'Do Work

    End If

respondido 09 mar '12, 17:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.