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稍后在程序中实例化。这就是我得到这个例外的原因。您能告诉我,即使我的用户控件尚未实例化,我如何让我的主窗体订阅此事件吗?我的意思是,在这个用户控件实例化之后,我的主窗体是否有一种订阅的方式?提前感谢。如果您确实需要在不实例化表单的情况下执行此操作,您可以在第二个表单上使用静态属性。。。但你为什么要订阅不存在的东西:)