简体   繁体   English

在主窗体上的用户控件中订阅事件时,发生NullReferenceException

[英]NullReferenceException when subscribing to an event in the user control on the main form

On my User Control I have created an event to notify my main form that a tab control must switch its tab. 在我的User Control我创建了一个事件以通知我的主表单一个选项卡控件必须切换其选项卡。 This event must be triggered on a button's click on the user control. 必须在用户控件上单击按钮时触发此事件。 (I have a very similar event in another User Control that is working fine) (我在另一个运行正常的用户控件中有一个非常类似的事件)

In my user control: 在我的用户控件中:

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();
}

In my main form: 在我的主要形式中:

public FormMain()
{
    InitializeComponent();
    myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };           
}

private void ChangeRunTabToType()
{
    if (this != null)
        this.ChangeTabIndex(metroTabControlRun, 1);
}

When I run my program I get a NullReferenceException on the line 当我运行程序时,我在行上得到一个NullReferenceException

myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); }; 

Does anyone know where it comes from? 有人知道它来自哪里吗?

If myUserControl isn't instantiated yet (and that's what is null), then I'd recommend moving: 如果还没有实例化myUserControl(那是空的),那么我建议移动:

myUserControl.TabChangeRequested += (sender, args) => { ChangeRunTabToType(); };     

to after where you are creating/assigning myUserControl! 创建/分配myUserControl的位置之后!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM