我正在编写一个继承自 DataGridView 的控件。我想做的一件事是处理在不处理 CellFormatting 事件(并自己进行格式化)的情况下不使用列的格式提供程序的错误。
我想我会写一个“OnCellFormatting”方法,上面写着“如果有列格式提供程序,并且没有 CellFormatting 事件处理程序,请进行格式化”。
重要的一点(我认为)是“......并且没有 CellFormatting 事件处理程序”。
现在,过去当我用事件编写控件时,我做过这样的事情:
public event EventHandler SomethingHappened;
protected void OnSomethingHappened(EventArgs e)
{
EventHandler handler = this.SomethingHappened;
if (handler != null) handler(this, e);
}
这很好用,我的理解是这种模式确定处理程序是否附加到事件,如果是,则调用这些处理程序。很公平,但为什么我不能这样做:
protected void OnCellFormatting(EventArgs e)
{
EventHandler handler = this.CellFormatting;
if (handler == null) DoSomething();
}
错误是“事件'System.Windows.Forms.DataGridView.CellFormatting'只能出现在+=或-=的左侧
这种(类型)事件有什么不同?
如果我去事件的定义,并创建我自己的,即。
公共事件 DataGridViewCellFormattingEventHandler CellFormatting2
...编译器很乐意将其分配给我的“处理程序”变量,所以我的问题是 - CellFormatting 事件有什么不同(并且假设还有许多其他事件)我无法确定它是否有任何事件处理程序?
谢谢,罗斯