我正在编写一个继承自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事件有什么不同(并且,一个假设,许多其他人)我无法确定是否有任何事件处理程序?
谢谢, 罗斯
答案 0 :(得分:0)
只有声明该事件的类才具有对它的完全访问权限。
例如,您无法从其他类调用事件 - 甚至是派生的事件。
您处于这种情况,因为您来自DataGridView
。
您可以使用反射:
答案 1 :(得分:0)
这表明无法执行赋值,因为它是只读的。也许你可以尝试声明处理程序是私有的吗?