我是c#的新手,可能会问一个非常简单的问题,但是我无法在网上找到任何帮助。
我有一个带有TabPage的tabControl,它包含一个TextBox对象;此事件,当事件"文字改变"被调用,将执行父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,而不是创建一个像第一个一样的页面(即包含一个文本框到同一个位置,它有一个方法来改变我刚刚创建的父标签页的文本?
答案 0 :(得分:0)
这是一个例子。
//..
// 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。然后你可以在表格上做布局。一个相当不错的例子是here on MSDN
问题是与表单无关,这意味着您必须编写各种引用以使其正常工作。
我不确定你是否可能不会更好地编写一个完整的clonePage方法。它可以像上面的代码一样工作,但会遍历模板页面的控件并检查各种类型以添加正确的控件..
这实际上取决于更复杂的内容:布局或页面与表单及其他控件之间的联系..