Winforms将tabPage从子窗体添加到父窗体

时间:2016-12-15 15:59:48

标签: c# winforms tabcontrol

我想以父表单的形式添加其他表单的新标签页。

我的父表单为MainWindow,此表单为TabControl。 当我点击子表单按钮时我有子表单ChildForm我想在TabControl MainWindow ChildForm添加新标签页。

我尝试在private MainWindow mainWindow; public List(MainWindow form) { this.mainWindow = form; } private void createButton_Click(object sender, EventArgs e) { TabPage tabPage = new TabPage("ASD"); mainWindow.MainTabControl.TabPages.Add(tabPage); }

中创建构造函数依赖项
System.NullReferenceException

这将抛出MainWindow

我还尝试在mainTabControl访问者中创建女性将在MainWindow中返回public static TabControl MainTabControl { get { MainWindow self = new MainWindow(); return self.mainTabControl; } } 访问权限,但也无效。

{{1}}

这不起作用因为我创造了新的参考,这就是问题。

我尝试了两个例子,两个都没有用,我知道什么都不行!!!“

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

更好的方法是让任务为MainWindow创建新的tabpages,并且不要让子窗体知道MainWindow的内部细节。子表单公开一个事件,当他们想要通知他们的父母是时候创建一个新的标签页(或MainWindow想要做的任何事情)时,他们会提出它。 MainWindow订阅此事件并在请求时开始创建新标签页....

public class ListForm: Form
{
    public delegate void OnNewTabPage(string key);
    public event OnNewTabPage NewTabPage;

    public ListForm()
    {
       .....
    }

    private void createButton_Click(object sender, EventArgs e)
    {
        // Here we pass to the subscriber of the event just a string as 
        // the delegate requires, but, of course, you could change this 
        // to whatever data you wish to pass to the mainwindow 
        // Event a reference to an instance of a class with many fields...
        NewTabPage?.Invoke("ASD");
    }
}

主要形式的代码

ListForm f = new ListForm();
f.NewTab += CreateTabPage;
f.Show();

private void CreateTabPage(string key)
{
    TabPage page = new TabPage(key);
    this.TabControl.TabPages.Add(page);
}