如何在不使用 e.Cancel 方法的情况下取消事件?

问题描述 投票:0回答:4

我想取消数据gridview单元格点击事件

private void gridViewHistory_CellClick(object sender, DataGridViewCellEventArgs e)
{      
}

但是这个eventargs没有取消事件,如何取消该事件? 也许这个问题有一个非常简单的答案,但我仍然陷入困境,需要帮助。

提前致谢。

c# winforms event-handling
4个回答
5
投票

你不能。

WinForms 事件只是多播委托,因此它们无法被取消(在停止事件传播的意义上),除非这种情况由公开事件的对象处理(但我不知道有任何对象支持这个,通常事件是通知)。

也就是说,某些事件具有带有

Cancel
属性的参数,对象使用它来取消因该事件而应执行的操作。同样,如果实现不提供该属性,则您无法执行任何操作来更改此行为。

在您的情况下,您应该重写

OnCellClick
DataGridView
方法,以您喜欢的方式处理该问题(如果您不调用基类,则单元格将不会获得单击事件,并且
CellClick
事件也不会被解雇)。


1
投票

并非所有活动都可以取消。您可以选择不在事件处理程序中执行任何操作,但这并不意味着您可以取消它。

因此,除非有特定的

Cancel
类型方法,否则您无法取消事件。


0
投票

您可能想使用

CellValidating
事件:

private void gridViewHistory_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{
    if (.....)
    {
        e.Cancel = true;
    }
}

0
投票

你可以尝试

返回;

声明,但这仅适用于 asp:LinkButton OnClick 事件,这些事件随后不会传递给其他发布事件,例如 UpdateCommand。

© www.soinside.com 2019 - 2024. All rights reserved.