以下是我正在使用的代码
class ImpersonatedTab : System.Windows.Forms.TabPage
{
Credentials _cred = new Credentials();
public delegate void Savesetting(TabData Tb);
public event Savesetting TriggerSaveSetting;
public ImpersonatedTab(TabData tb)
{
........
}
private void SaveData()
{
TriggerSaveSetting(_tabdata);
}
private Onclick()
{
SaveData();
}
}
当我在ImpersonatedTab类中调用Onclick函数时,它返回错误,说TriggerSaveSetting为null
我将此调用初始化为
ImpersonatedTab Tab = new ImpersonatedTab(tb);
Tab.TriggerSaveSetting += new ImpersonatedTab.Savesetting(Tab_TriggerSaveSetting);
我之前已经创建了一些事件,但我无法弄清楚这个事件的错误。我肯定应该是一些愚蠢的错误。
答案 0 :(得分:2)
可能发生这种情况的一种情况是,如果您尝试从ImpersonatedTab
类的构造函数中调用该事件。你把那些...
放在哪里。最好在调用之前检查事件处理程序是否已初始化。
答案 1 :(得分:2)
将您的代码更改为:
public delegate void Savesetting(TabData Tb);
private Savesetting saveSettingDlg;
public event Savesetting TriggerSaveSetting {
add { saveSettingDlg += value; }
remove { saveSettingDlg -= value; }
}
private void SaveData() {
var handler = saveSettingDlg;
if (handler != null) handler(_tabdata);
}
您现在可以在添加访问者和SaveData()上设置断点,并验证事件订阅是否正常工作。如果您执行看到添加访问者被调用但仍然为处理程序获取null,那么对象引用就会出现问题。
答案 2 :(得分:1)
您尝试在附加任何处理程序之前调用TriggerSaveSetting事件处理程序。确保要检查事件是否附加了一些处理程序:
private void OnTriggerSaveSetting(_tabdata)
{
if (TriggerSaveSetting != null)
TriggerSaveSetting(_tabdata);
}