从用户控件制作选项卡

kes*_*ing 0 c# tabcontrol winforms

我有问题.我遇到了很多错误,当我尝试从用户控件添加标签时,这让我很烦.这是代码

public Form1 f1 { get; private set; }

private void button1_Click(object sender, EventArgs e)
{
    TabPage tp = new TabPage { };
    tp.Text = "NewTab";
    tp.Controls.Add(new b());
    f1.tabControl1.TabPages.Add(tp);  //>>> errors here
}
Run Code Online (Sandbox Code Playgroud)

图片了解更多细节:代码没有显示错误

运行时错误

IAb*_*act 6

您的代码未分配f1,这就是您在运行时获取空引用异常的原因.

取决于项目的架构......

A.如果UserControlForm后面的父代码中实例化,那么只需注入f1构造函数UserControl:

private readonly MyForm _f1;

public b(MyForm f1){
    InitializeComponents();

    _f1 = f1;
}

private void button1_Click(object sender, EventArgs e) {
    TabPage tp = new TabPage { };
    tp.Text = "NewTab";
    tp.Controls.Add(new b());

    //  assumes 'tabControl1' exists as a publicly accessible control
    _f1.tabControl1.TabPages.Add(tp);
}
Run Code Online (Sandbox Code Playgroud)

B.如果使用MVP然后,使用您拥有的代码,Presenter可以f1在初始化时分配变量但是创建setter publicinternal.