Winforms - 如何从当前表单到MainWindow表单创建新选项卡和TabPage

时间:2018-01-11 14:05:17

标签: c# winforms datagridview tabcontrol

我有一个MainWindow表单,其中包含TabControl组件,动态点击menuItem我创建一个新标签TabPage。新创建的TabPage包含新的Form

新打开的TabPage,其中包含新的Form en。Products,其DataGridView包含产品列表。当我双击DataGridview Products表单中的单元格时,我想将新标签页打开到Mainwindow

enter image description here

dataGridView1_CellContentDoubleClick - >在主窗口中打开新选项卡

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表单,以创建已在TabPage中定义的新MainWindow

public partial class Product: Form
{
   private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
         // create new tab page to MainWindow form
    }
}

我没有使用MDI,我认为如果不创建新的MainWindow实例并传递参数,这是不可能的。在我的情况下,MainWindow已经打开,如果我关闭MainWindow所有内容都将关闭。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在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;
    }
}