我想以父表单的形式添加其他表单的新标签页。
我的父表单为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}}
这不起作用因为我创造了新的参考,这就是问题。
我尝试了两个例子,两个都没有用,我知道什么都不行!!!“
任何人都知道如何解决这个问题?
答案 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);
}