Tengo un control TextBox en mi Formulario. Uso el evento Leave en el control para procesar la entrada del usuario. Funciona bien si el usuario hace clic en algún otro control en el formulario, pero incluso no se dispara cuando el usuario va directamente al menú principal. ¿Alguna idea de qué evento debo usar para que se active cada vez?WinForms: El evento TextBox Leave no se activa después de ir al menú principal
Respuesta
He encontrado una solución razonable, me puse el foco en el menú principal de forma manual:
EDIT: Como sugiere @TcKs, he cambiado el evento desde ItemClicked a MenuActivate. Muchas gracias por ayuda!
private void menuStrip1_MenuActivate(object sender, EventArgs e)
{
menuStrip1.Focus();
}
Debe usar los eventos "Validating" y "Validated" para verificar la entrada del usuario. Luego, si el usuario va a otro control "A", y el control "A" tiene la propiedad "CausesValidating" configurada en "true" (su valor predeterminado), se dispararán los eventos "Validating" y "Validated".
El menú también tiene la propiedad "CuasesValidating".
Editar: Lo siento, se olvidó de la "CuasesValidating" en la banda de menú es nuestra funcionalidad y no incorporado. Pero la comprobación de validación es bastante simple:
private void menuStrip1_MenuActivate(object sender, EventArgs e) {
bool ret = this.Validate(false);
if (false == ret) {
// user's input is wrong
}
}
usuario cualquiera ContainerControl en lugar de "este", si desea comprobar la validación en otro control que el "este" formulario. Por ejemplo, en la ventana MDI Child.
cuando se juega con un menú, que tiene que simular, de alguna manera, un LostFocus y tal vez recordar donde estaba en caso de cerrar el menú sin hacer nada por lo que el enfoque volvería en el cuadro de texto
hay algunos casos cuando Lostfocus no se activa, por ejemplo, haciendo clic en los botones de la barra de herramientas y en los elementos del menú. Utilizo para solucionar esto con una variable local "LastControl" y lo manejo yo mismo cuando el menú tiene foco.
Existen razones por las que el clic del menú no pierde el foco del cuadro de texto. Si desea tener, por ejemplo, un menú "Editar" con "Pegar", la opción "Pegar" debe actuar en contra del control que tiene el foco y por eso no debe robar el foco de ningún control en el formulario.
Por lo tanto, el menú se puede ver como un menú contextual que no roba el foco del control.
Es justo que el menú no elimine el foco del control, pero, por otro lado, no hay un mecanismo para manejar mi escenario de una manera razonablemente simple. Su método está bien en casos simples, pero tengo una jerarquía de controles de usuario utilizados en diferentes formularios, así que realmente no puedo tener LastControl – Grzenio
Sí, estaba listo para publicar un ejemplo que dinámicamente reenvió un InvokeLostFocus (LastControl) cuando el menú fue activado Pero luego vi su solución con menustrip1.focus() así que no lo hice. ;) – Stefan
necesita un pixel etiqueta de 1 píxel por 1
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
MsgBox("yes")
End Sub
Private Sub MenuStrip1_MenuActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuStrip1.MenuActivate
CType(sender, MenuStrip).Tag = ActiveControl
Label1.Focus()
End Sub
Private Sub MenuStrip1_MenuDeactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuStrip1.MenuDeactivate
If CType(sender, MenuStrip).Tag Is Control AndAlso CType(CType(sender, MenuStrip).Tag, Control).CanFocus Then
CType(CType(sender, MenuStrip).Tag, Control).Focus()
End If
CType(sender, MenuStrip).Tag = Nothing
End Sub
- 1. Al modificar un control TextBox en el evento Leave se excluye el control
- 2. ¿El evento KeyDown no se activa con .NET WinForms?
- 3. enganchar por defecto el evento "Pegar" del control WinForms TextBox
- 4. Evento de WinForms para el foco de TextBox?
- 5. 'siguiente' en el menú desplegable de iPhone Safari no se activa en el evento de cambio
- 6. Watermark TextBox en WinForms
- 7. Control + haga clic en el menú que no se activa Para el evento
- 8. socket.io - el evento 'connect' no se activa en el cliente
- 9. Evento ASP.Net Session_Start que no se activa
- 10. evento onScroll no se activa para listview
- 11. javascript-events-- 'mouseup' no se activa después de mousemove
- 12. JavaScript setTimeout no se activa después de Window.Open
- 13. MVC2 TextBox ¿El valor no se actualiza después del envío?
- 14. asp: ImageButton no activa el evento onclick
- 15. Evento div hover vacío que no se activa en IE
- 16. backbone.js haga clic en el evento que no se activa
- 17. didRotateFromInterfaceOrientation no se activa al rotar?
- 18. Evento de clic de jquery que no se activa al utilizar el control de detección
- 19. Winforms, databinding, Listbox y textbox
- 20. menú contextual principal?
- 21. Custom Caret para WinForms TextBox
- 22. .NET SerialPort Evento DataReceived que no se activa
- 23. Evento SelectedIndexChanged de DropDownList que no se activa
- 24. Evento ASP.NET TextBox LostFocus
- 25. ¿Por qué mi evento de validación no se activa en C#?
- 26. @ Html.TextBoxFor textbox no se resalta después de la validación fallida
- 27. Evento de audio HTML5 'progress' no se activa
- 28. ASP.Net textbox onblur evento
- 29. evento onTouch que a veces no se activa ACTION_POINTER_DOWN
- 30. OpenCart: ¿Agregar categorías al menú principal?
Funciona solo para mouse, pero no para teclado. Por favor mira mi edición. – TcKs