问题
I have a MainWindow form which contains TabControl component where dynamicly on click on menuItem I create a new tab and TabPage. The new created TabPage contains a new Form.
The new opened TabPage, which contains the new Form en.Products have DataGridView with products list. When I double click on a cell in the DataGridview from Products form I want to open new tabPage to Mainwindow.
dataGridView1_CellContentDoubleClick -> open new tab in main window
In MainWindow I create:
private void ProductListToolStripMenuItem_Click(object sender, EventArgs e)
{
ProductForm = f = new Form();
CreateTabPage(f);
}
private void CreateTabPage(Form form)
{
form.TopLevel = false;
TabPage tabPage = new TabPage();
tabPage.Text = form.Text;
tabPage.Controls.Add(form);
mainWindowTabControl.Controls.Add(tabPage);
mainWindowTabControl.SelectedTab = tabPage;
form.Show();
}
From Product form I want to send data to MainWindow form to create new TabPage which is already defined in MainWindow.
public partial class Product: Form
{
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// create new tab page to MainWindow form
}
}
I am not using MDI and I think this is impossible without creating a new MainWindow instance and pass parameters. In my case the MainWindow is already opened, if I close MainWindow all will be closed.
Any idea how to solve this issue?
回答1:
Create a property on you MainWindow that exposes the mainWindowTabControl as a property
public System.Windows.Forms.TabControl MainTabControl
{
get
{
return mainWindowTabControl;
}
}
Now, have a property on your Product form, MainFormRef, so when you create instance of your Product form, pass reference of your MainWindow to it:
Product p = new Product();
p.MainFormRef = this;
Now use this to add new tabs:
public partial class Product: Form
{
public Form MainFormRef { get; set; }
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// create new tab page to MainWindow form
TabPage tabPage = new TabPage();
tabPage.Text = form.Text;
tabPage.Controls.Add(form);
MainFormRef.MainTabControl.Controls.Add(tabPage);
MainFormRef.MainTabControl.SelectedTab = tabPage;
}
}
来源:https://stackoverflow.com/questions/48208918/winforms-how-to-create-new-tab-and-tabpage-from-current-form-to-mainwindow-for