用户控件 dll 中的组件事件

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

我创建了一个用户控件 dll,我在这个用户控件 dll 中放置了一个 dataGridView 和一些按钮。

当主程序引用usercontrol dll时,我希望主程序能够编辑dataGridView的CellFormatting事件。

我向 usercontrol dll 添加了代码

public event DataGridViewCellFormattingEventHandler OnDgvData_CellFormatting;
private void DgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
     this.OnDgvData_CellFormatting.Invoke(sender, e);
}

我可以在主程序中编辑用户控件的dataGridView的CellFormatting事件。

private void UserControl_OnDgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    //edit...
}

但是如果我不在主程序中使用UserControl_OnDgvData_CellFormatting创建事件, 执行过程中会出现异常。

system.nullreferenceexception 对象引用未设置到对象的实例。

我应该如何修改我的代码以避免这种情况?

c# events dll user-controls
1个回答
0
投票

这一行:

this.OnDgvData_CellFormatting.Invoke(sender, e);

表示“为

OnDgvData_CellFormatting
事件调用已注册的事件处理程序”。当然,如果没有注册的事件处理程序,则会引发异常。如果您查看任何发起自己的活动的示例,您会发现他们要么这样做:

if (this.OnDgvData_CellFormatting != null)
{
    this.OnDgvData_CellFormatting.Invoke(sender, e);
}

或者,由于支持空传播,因此:

this.OnDgvData_CellFormatting?.Invoke(sender, e);

在这两种情况下,代码都表示“当且仅当注册了一个或多个事件处理程序时,才为

OnDgvData_CellFormatting
事件调用已注册的事件处理程序”。

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