2010-04-20 5 views
7

Je souhaite annuler un événement à partir de cette portée de fonction.Comment annuler un événement dans des winforms?

Par exemple. J'ai appuyé sur l'événement de clic de bouton et sur la fausse validation, je veux annuler cet événement. De même, je veux annuler d'autres événements aussi.

Comment puis-je faire cela en C#

Répondre

7

Cela dépend du scénario; dans la plupart des cas: plutôt que cancel l'événement, ne rien faire, par exemple:

private void SaveDataClicked(object sender, EventArgs args) { 
    if(!ValidateData()) return; 
    // [snip: code that does stuff] 
} 

ou:

private void SaveDataClicked(object sender, EventArgs args) { 
    if(ValidateData()) { 
     // [snip: code that does stuff] 
    } 
} 

Il y a quelques événements qui exposent une CancelEventArgs (ou similaire), ce qui permet de pour annuler certains comportement externe via le args - la fermeture de formulaire étant l'exemple le plus évident (définir e.Cancel = true;). Notez que dans ce scénario, je n'aurais pas un résultat de dialogue automatique sur le bouton; appliquez-le manuellement lorsque (si) le gestionnaire se termine avec succès.

+0

@Marc: Thx pour fournir des informations utiles. J'ai travaillé pour les deux scénarios. –

+0

Cela ne fonctionne pas dans ** cancelButton_Click ** et ** okButton_Click ** car ils ont pour effet secondaire de fermer la boîte de dialogue. Mais, oui, pour tout bouton qui ne configure pas automatiquement le DialogResult, c'est plus facile. –

-3
private void SaveDataClicked(object sender, EventArgs args) 
{ 
    args.cancel = true; 
} 
+2

Malheureusement, ** EventArgs ** n'a pas de propriété **. Cancel **. Ni une ** propriété ** Handeled **. Vous aurez donc besoin d'un type différent d'EventArgs, comme ** RoutedEventArgs **, par exemple. –

+0

cela m'a aidé :) merci beaucoup –

Questions connexes