2008-11-13 7 views
1

J'ai un tas de contrôles (textbox et combobox) sur un formulaire avec tooltripcontainer et toolstripbuttons pour sauvegarder, annuler etc pour les modifications. Nous utilisons .Net 3.5 SP1
Il y a beaucoup de logique écrite dans les événements control.lostfocus et control.leave. Ces événements ne sont pas appelés lorsque vous cliquez sur les boutons de la barre d'outils. Est-il possible d'appeler ces événements manuellement lorsque l'un de ces boutons est pressé.Élever manuellement l'événement LostFocus sur un contrôle

Merci.
Kishore

[Modifier]

Voilà comment je résolu le problème. Merci Chris Marasti-Georg pour le pointeur. Dans l'événement de clic sur un bouton, j'appelle le focus sur la barre d'outils au lieu du bouton car le bouton de l'outil n'a pas d'événement de focus. Nous pouvons accéder au toolstrip sur lequel le bouton est placé à l'aide

((ToolStripButton) expéditeur) .Owner.Focus()

-Kishore

+0

heureux de vous aider. Le configurateur fait un bon point - il peut être judicieux de déplacer la logique LostFocus/Leave dans d'autres méthodes plus visibles, afin qu'elles puissent être appelées par les gestionnaires de click. Juste une pensée. –

Répondre

4

Vous pouvez écouter les événements de clic sur les boutons, et dans le gestionnaire appeler leur méthode de mise au point. Cela ferait (espérons-le) que le contrôle précédemment focalisé répondrait correctement. Ajoutez le gestionnaire suivant à l'événement de clic de chaque bouton:

private void ButtonClick(object sender, EventArgs e) { 
    if(sender != null) { 
     sender.Focus(); 
    } 
} 
1

Vous pouvez étendre ces contrôles et ensuite appeler la OnLostFocus et OnLeave méthodes protégées de la classe de base ...

1

Je vous suggère de déplacer la connexion à une méthode en dehors du gestionnaire d'événements et d'appeler cette méthode ...

Questions connexes