J'ai un contrôle TextBox sur mon formulaire. J'utilise l'événement Leave sur le contrôle pour traiter les entrées utilisateur. Cela fonctionne bien si l'utilisateur clique sur un autre contrôle sur le formulaire, mais le même ne se déclenche pas lorsque l'utilisateur va directement au menu principal. Des idées quel événement dois-je utiliser pour le faire virer à chaque fois?WinForms: l'événement de quitter la zone de texte ne se déclenche pas après avoir accédé au menu principal
Répondre
J'ai trouvé une solution raisonnable, je mets l'accent sur le menu principal manuellement:
EDIT: Comme suggéré par @TcKs, j'ai changé l'événement de ItemClicked à MenuActivate. Merci beaucoup pour votre aide!
private void menuStrip1_MenuActivate(object sender, EventArgs e)
{
menuStrip1.Focus();
}
Vous devez utiliser les événements "Validation" et "Validé" pour vérifier l'entrée de l'utilisateur. Ensuite, si l'utilisateur passe à un autre contrôle "A" et que le contrôle "A" a la propriété "CausesValidating" définie sur "true" (sa valeur par défaut), l'événement "Validating" et "Validated" seront déclenchés.
Le menu possède également la propriété "CuasesValidation".
Editer: Désolé, j'ai oublié le "CuasesValidation" dans la barre de menu est notre fonctionnalité et non intégré. Mais le chèque de validation est assez simple:
private void menuStrip1_MenuActivate(object sender, EventArgs e) {
bool ret = this.Validate(false);
if (false == ret) {
// user's input is wrong
}
}
utilisateur tout ContainerControl au lieu de « ce », si vous voulez vérifier la validation dans un autre contrôle que la forme « ce ». Par exemple dans la fenêtre enfant MDI.
lors de la lecture avec un menu, vous devez simuler, en quelque sorte, un LostFocus et se souvenant peut-être où il était dans le cas où vous fermez le menu sans faire quoi que ce soit si l'accent retournerait dans la zone de texte
Il y a quelques cas lorsque Lostfocus n'est pas activé, par exemple en cliquant sur les boutons de la barre d'outils et les éléments de menu. J'utilise pour contourner cela avec une variable locale "LastControl" et le manipuler moi-même quand le menu a le focus.
Il existe des raisons pour lesquelles le clic sur un menu ne perd pas le focus de la zone de texte. Si vous voulez avoir par exemple un menu "Edition" avec "Coller", le "Coller" devrait agir contre le contrôle qui a le focus et à cause de cela il ne doit pas voler le focus des contrôles sur le formulaire. Par conséquent, le menu peut être vu comme un menu contextuel qui ne vole pas le focus du contrôle.
Il est juste que le menu ne vole pas le contrôle - mais d'un autre côté, il n'y a pas de mécanisme pour gérer mon scénario d'une manière raisonnablement simple. Votre méthode est OK dans des cas simples, mais j'ai une hiérarchie de contrôles utilisateur utilisés sur différents formulaires, donc je ne peux pas vraiment avoir LastControl – Grzenio
Ouais, j'étais prêt à poster un exemple qui a transmis dynamiquement un InvokeLostFocus (LastControl) lorsque le menu a été activé. Mais alors j'ai vu votre solution de contournement avec menustrip1.focus() donc je n'ai pas. ;) – Stefan
vous avez besoin d'une étiquette 1 pixel par 1 pixel
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. JavaScript: l'événement Mousewheel ne se déclenche pas au-dessus de la zone de texte
- 2. La validation du validateur personnalisé ne se déclenche pas pour la zone de texte
- 3. événement ouvert ContextMenuStrip ne se déclenche pas après l'événement opeing
- 4. Problème: textbox ne déclenche pas son événement TextChanged après avoir tapé du texte?
- 5. L'événement KeyDown ne se déclenche pas avec .NET WinForms?
- 6. Événement clé Echap ne se déclenche pas dans les winforms
- 7. PreviewMouseRightButtonUp ne se déclenche pas quand Contexte Menu est ouvert
- 8. Quitter le menu jQuery après un délai
- 9. Pourquoi mon événement de validation ne se déclenche-t-il pas en C#?
- 10. Winforms zone de texte autoheight
- 11. L'événement textchanged ne se déclenche pas lors de l'utilisation de jscript
- 12. L'interface utilisateur ne répond toujours pas après avoir utilisé control.begininvoke
- 13. AddHandler ne se déclenche pas dans rowdatabound
- 14. WinForms | C# | AutoComplete au milieu d'une zone de texte?
- 15. Le rappel getJSON ne se déclenche pas
- 16. L'activité de retard ne se déclenche pas dans SharePoint Workflow
- 17. l'événement onclick ne se déclenche pas
- 18. textViewDidBeginEditing ne se déclenche pas en raison du zoom
- 19. Le déclenchement Quartz.NET ne se déclenche pas
- 20. jquery Animer ne se déclenche pas
- 21. cache Zend ne se déclenche pas
- 22. JQuery - ne se déclenche pas MVC action
- 23. L'événement selectedchanged de liste déroulante ne se déclenche pas?
- 24. Le déclencheur de données ne se déclenche pas
- 25. asp.net - L'événement de bouton ne se déclenche pas
- 26. nouvel événement de tâche ne se déclenche pas
- 27. C#: Non-Winforms façon de quitter l'application?
- 28. Ne pas autoriser le zéro dans la zone de texte
- 29. La touche d'accès au menu ne fonctionne qu'après affichage de l'élément de menu
- 30. JQuery: Ouvrir le menu après avoir oscillé
Cela fonctionne seulement pour la souris, mais pas pour le clavier. S'il vous plaît voir mon edit. – TcKs