如何在WinForms中取消任何事件?

8
我想在函数内取消一个事件。
例如,当我按下按钮并进行错误验证时,我想要取消此事件。同样,我也想取消其他事件。
如何在C#中实现这一点?
2个回答

7

这要看具体情况。在大多数情况下,不要取消事件,而是什么都不做,例如:

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

或者:

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

有一些事件会暴露出CancelEventArgs(或类似对象),允许通过args取消一些外部行为,关闭窗体就是最明显的例子(设置e.Cancel = true;)。

请注意,在这种情况下,我不会在按钮上自动应用对话框结果;只有当处理程序成功完成时才手动应用它。


@Marc:感谢您提供有用的知识。我已经为两种情况解决了问题。 - Shantanu Gupta
这只在cancelButton_ClickokButton_Click中无效,因为它们会关闭对话框。但是,是的,对于任何不自动设置DialogResult的按钮来说,这是最简单的方法。 - Jesse Chisholm

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

2
遗憾的是,EventArgs 没有 .Cancel 属性。也没有 .Handled 属性。因此,您需要使用不同类型的 EventArgs,例如 RoutedEventArgs - Jesse Chisholm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接