代码之家  ›  专栏  ›  技术社区  ›  iorice

usercontrol dll中的组件事件

  •  0
  • iorice  · 技术社区  · 1 年前

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

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

    我已将代码添加到用户控制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_OnDvvData_CellFormatting创建事件 执行过程中将出现异常。

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

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

    1 回复  |  直到 1 年前
        1
  •  2
  •   jmcilhinney    1 年前

    此行:

    this.OnDgvData_CellFormatting.Invoke(sender, e);
    

    正在说“调用 OnDgvData_CellFormatting event”。当然,如果没有注册的事件处理程序,它会引发异常。 OnDgvData_CellFormatting 基本上是指将处理事件的委托的字段。如果没有注册事件处理程序,则该字段将 null 。如果你查看任何举办自己活动的例子,你会发现他们要么这样做:

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

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

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

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