C# 在主窗体的用户控件中订阅事件时出现NullReferenceException
在我的C# 在主窗体的用户控件中订阅事件时出现NullReferenceException,c#,events,user-controls,nullreferenceexception,C#,Events,User Controls,Nullreferenceexception,在我的用户控件上创建了一个事件,通知我的主窗体选项卡控件必须切换其选项卡。此事件必须在单击用户控件上的按钮时触发。(我在另一个用户控件中遇到了一个非常类似的事件,该事件运行良好) 在我的用户控件中: public delegate void EventHandler(object sender, EventArgs args); public event EventHandler TabChangeRequested = delegate { }; protected void OnTabCh
用户控件上
创建了一个事件,通知我的主窗体选项卡控件必须切换其选项卡。此事件必须在单击用户控件上的按钮时触发。(我在另一个用户控件中遇到了一个非常类似的事件,该事件运行良好)
在我的用户控件中:
public delegate void EventHandler(object sender, EventArgs args);
public event EventHandler TabChangeRequested = delegate { };
protected void OnTabChangeRequested()
{
if (TabChangeRequested != null)
{
TabChangeRequested(this, new EventArgs());
}
}
private void btnBackToSelectType_Click(object sender, EventArgs e)
{
this.OnTabChangeRequested();
}
public FormMain()
{
InitializeComponent();
myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };
}
private void ChangeRunTabToType()
{
if (this != null)
this.ChangeTabIndex(metroTabControlRun, 1);
}
在我的主要表格中:
public delegate void EventHandler(object sender, EventArgs args);
public event EventHandler TabChangeRequested = delegate { };
protected void OnTabChangeRequested()
{
if (TabChangeRequested != null)
{
TabChangeRequested(this, new EventArgs());
}
}
private void btnBackToSelectType_Click(object sender, EventArgs e)
{
this.OnTabChangeRequested();
}
public FormMain()
{
InitializeComponent();
myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };
}
private void ChangeRunTabToType()
{
if (this != null)
this.ChangeTabIndex(metroTabControlRun, 1);
}
当我运行我的程序时,我得到一个NullReferenceException
myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };
有人知道它来自哪里吗?如果myUserControl还没有实例化(这就是null),那么我建议移动:
myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };
在您创建/分配myUserControl的位置之后 myUserControl何时实例化?@Bun你说得对!myUserControl稍后在程序中实例化。这就是我得到这个例外的原因。您能告诉我,即使我的用户控件尚未实例化,我如何让我的主窗体订阅此事件吗?我的意思是,在这个用户控件实例化之后,我的主窗体是否有一种订阅的方式?提前感谢。如果您确实需要在不实例化表单的情况下执行此操作,您可以在第二个表单上使用静态属性。。。但你为什么要订阅不存在的东西:)