Я новичок в С# и, вероятно, собираюсь задать очень простой вопрос, но я не смог найти что-либо в Интернете, чтобы помочь.
У меня есть tabControl с TabPage, который содержит объект 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, который я только что создал?
Вот пример.
//..
// 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. Он может работать как вышеприведенный код, но будет перебирать элементы управления страницы шаблона и проверять различные типы, чтобы добавить правильные элементы управления.
Это действительно зависит от того, что сложнее: макет или связи между страницами и формой и другими элементами управления.