Winforms - 如何从当前窗体到 MainWindow 窗体创建新选项卡和 TabPage
Winforms - How to create new tab and TabPage from current form to MainWindow form
我有一个 MainWindow
表单,其中包含 TabControl
组件,动态单击 menuItem 我创建了一个新选项卡和 TabPage
。新创建的 TabPage
包含新的 Form
.
新开TabPage
,其中包含新Form
en.Products
有DataGridView
with products列表。当我双击 Products
表单中 DataGridview
中的一个单元格时,我想打开新的 tabPage 到 Mainwindow
。
dataGridView1_CellContentDoubleClick
-> 在主页面打开新标签 window
在 MainWindow
我创建:
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();
}
从 Product
表单我想将数据发送到 MainWindow
表单以创建已在 MainWindow
.
中定义的新 TabPage
public partial class Product: Form
{
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// create new tab page to MainWindow form
}
}
我没有使用 MDI
,我认为如果不创建新的 MainWindow
实例并传递参数,这是不可能的。在我的例子中,MainWindow
已经打开,如果我关闭 MainWindow
,所有的都将被关闭。
知道如何解决这个问题吗?
在 MainWindow 上创建一个 属性,将 mainWindowTabControl 公开为 属性
public System.Windows.Forms.TabControl MainTabControl
{
get
{
return mainWindowTabControl;
}
}
现在,Product
表单上有一个 属性,MainFormRef
,因此当您创建 Product
表单的实例时,将 MainWindow 的引用传递给它:
Product p = new Product();
p.MainFormRef = this;
现在使用它来添加新标签:
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;
}
}
我有一个 MainWindow
表单,其中包含 TabControl
组件,动态单击 menuItem 我创建了一个新选项卡和 TabPage
。新创建的 TabPage
包含新的 Form
.
新开TabPage
,其中包含新Form
en.Products
有DataGridView
with products列表。当我双击 Products
表单中 DataGridview
中的一个单元格时,我想打开新的 tabPage 到 Mainwindow
。
dataGridView1_CellContentDoubleClick
-> 在主页面打开新标签 window
在 MainWindow
我创建:
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();
}
从 Product
表单我想将数据发送到 MainWindow
表单以创建已在 MainWindow
.
TabPage
public partial class Product: Form
{
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// create new tab page to MainWindow form
}
}
我没有使用 MDI
,我认为如果不创建新的 MainWindow
实例并传递参数,这是不可能的。在我的例子中,MainWindow
已经打开,如果我关闭 MainWindow
,所有的都将被关闭。
知道如何解决这个问题吗?
在 MainWindow 上创建一个 属性,将 mainWindowTabControl 公开为 属性
public System.Windows.Forms.TabControl MainTabControl
{
get
{
return mainWindowTabControl;
}
}
现在,Product
表单上有一个 属性,MainFormRef
,因此当您创建 Product
表单的实例时,将 MainWindow 的引用传递给它:
Product p = new Product();
p.MainFormRef = this;
现在使用它来添加新标签:
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;
}
}