You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决UserControl DLL中DataGridView CellFormatting事件空引用异常

解决DataGridView CellFormatting事件未订阅时的空引用异常

问题根源在于当没有任何主程序订阅OnDgvData_CellFormatting事件时,该事件委托的实例为null,直接调用Invoke就会触发NullReferenceException。以下是三种可靠的修复方式:

方法一:调用前检查委托是否为null(兼容所有C#版本)

修改UserControl中DgvData_CellFormatting方法,先判断事件是否有订阅者,再执行Invoke:

public event DataGridViewCellFormattingEventHandler OnDgvData_CellFormatting;
private void DgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // 先验证事件委托是否存在订阅者
    if (OnDgvData_CellFormatting != null)
    {
        OnDgvData_CellFormatting.Invoke(sender, e);
    }
}

方法二:使用空条件运算符(C# 6.0及以上版本适用)

利用?.运算符简化空值检查,当委托为null时会直接跳过Invoke操作:

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

方法三:给事件绑定空默认委托(一劳永逸)

声明事件时直接赋值一个空的匿名委托,确保事件永远不会为null,后续无需每次检查:

// 初始化时绑定空委托
public event DataGridViewCellFormattingEventHandler OnDgvData_CellFormatting = delegate { };
private void DgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    OnDgvData_CellFormatting.Invoke(sender, e);
}

三种方法都能有效避免未订阅事件时的空引用异常,可根据项目使用的C#版本选择合适的方案。

内容的提问来源于stack exchange,提问作者iorice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:13:27