Добавление двойной вкладки tabPage к tabControl с помощью пользовательской команды

1

Я новичок в С# и, вероятно, собираюсь задать очень простой вопрос, но я не смог найти что-либо в Интернете, чтобы помочь.

У меня есть tabControl с TabPage, который содержит объект TextBox; этот объект, когда вызывается событие "Текст изменено", выполнит изменение родительского имени tabPage.

Изображение 174551

Текстовое поле, в котором я набрал "текст, измененный мной", имеет метод, который управляет изменением имени 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:

Изображение 174551

Итак, мой вопрос: как я могу сделать так, что, когда пользователь нажимает "Добавить новую страницу", вместо создания пустой новой вкладки, программа скорее создает страницу, такую как первая (т.е. Содержит текстовое поле в том же позицию, которая имеет способ изменить текст родительского tabPage, который я только что создал?

  • 0
    Либо создайте пользовательский контроль со всеми необходимыми функциями и добавьте его экземпляр. Или оставайтесь с вашим кодом, но заново создайте элементы управления вашей вкладки в новой. Если у вас всегда есть один и тот же код в кнопке, вы можете добавить его для каждой лямбды .. Смотрите здесь пример использования labmda для создания динамических методов ..!
Теги:

1 ответ

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. Затем вы можете сделать макет на нем, как на форме. Хорошим примером здесь является MSDN

Проблема в том, что у него нет связи с формой, то есть вам придется кодировать всевозможные ссылки, чтобы заставить ее работать.

Я не уверен, что вам лучше не писать полный метод clonePage. Он может работать как вышеприведенный код, но будет перебирать элементы управления страницы шаблона и проверять различные типы, чтобы добавить правильные элементы управления.

Это действительно зависит от того, что сложнее: макет или связи между страницами и формой и другими элементами управления.

  • 0
    Спасибо за ответ, TaW. На самом деле да, я буду развивать гораздо больше на каждой странице (здесь я только что опубликовал небольшой пример), так что, хотя я понял ваш пример с лямбдой, я думаю, что легче думать о чем-то более динамичном. Не могли бы вы дать мне некоторую справку о том, как создать пользовательский элемент управления для управления созданием новой вкладки с такими же характеристиками, как у первой, каждый раз, когда пользователь добавляет ее?
  • 0
    Извините, но я действительно новичок в этом языке, я не знаю, что такое пользовательский элемент управления, и просмотр в Интернете дает мне слишком общие результаты.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню