通过用户命令将tabPage添加到tabControl

我是c#的新手,可能会问一个非常简单的问题,但我无法在网上找到任何帮助。

我有一个带有TabPage的tabControl,它包含一个TextBox对象; 此对象,当调用“Text changed”事件时,将执行父tabPage名称的更改。

在此处输入图像描述

我输入“由我更改的文本”的文本框有一个管理更改tabPage名称的方法:

private void textBox1_TextChanged(object sender, EventArgs e) { if (this.textBox1.Text != "") this.tabControl2.SelectedTab.Text = this.textBox1.Text; else this.tabControl2.SelectedTab.Text = "(no name)"; } 

进入当前页面菜单包含一个控件来添加一个新页面,当用户点击它时运行该方法:

 private void addNewPageToolStripMenuItem_Click(object sender, EventArgs e) { int numPagine; string strPagine; numPagine = this.tabControl2.TabCount; strPagine = numPagine.ToString(); this.tabControl2.TabPages.Add("new page" + strPagine); } 

…这里是输出,这是预期的,因为我只是要求添加一个新的空tabPage:

在此处输入图像描述

所以,我的问题是:当用户点击“添加新页面”时,如何创建一个空的新tabPage,而不是创建一个类似第一个页面的页面(即包含一个文本框)有一个方法来改变我刚刚创建的父标签的文本的位置?

这是一个例子。

  //.. // create the new page TabPage tpNew = new TabPage("new page.."); // add it to the tab this.tabControl2.TabPages.Add(tpNew); // create one labe with text and location like label1 Label lbl = new Label(); lbl.Text = label1.Text; lbl.Location = label1.Location; // create a new textbox.. TextBox tbx = new TextBox(); tbx.Location = textBox1.Location; tpNew.Controls.Add(lbl); tpNew.Controls.Add(tbx); // add code to the new textbox via lambda code: tbx.TextChanged += ( (sender2, evArgs) => { if (tbx.Text != "") this.tabControl2.SelectedTab.Text = tbx.Text; else this.tabControl2.SelectedTab.Text = "(no name)"; } ); 

对于更复杂的布局,您可能需要考虑创建用户控件。您还可能想要使用此代码创建第一页; 当然还有文本和位置的真实价值!

要创建UserControl请转到项目标记,然后右键单击Add-UserControl-UserControl并将其命名,也许是myTagPageUC。 然后你可以在表格上做布局。 一个相当不错的例子就在MSDN上

问题是与表单没有任何关联,这意味着您必须编写各种引用以使其工作。

我不确定你是否可能不会更好地编写一个完整的clonePage方法。 它可以像上面的代码一样工作,但会遍历模板页面的控件并检查各种类型以添加​​正确的控件。

这实际上取决于更复杂的内容:布局或页面与表单及其他控件之间的联系。