Как я могу программно добавить вкладку в форму во время выполнения?

#c# #winforms #visual-studio-2010

#c# #winforms #visual-studio-2010

Вопрос:

Я погуглил это и все еще не могу заставить это работать. Я знаю, как добавить вкладку с помощью toolbox. Я также читал о том, как это сделать программно, но я все еще не понимаю. (MSVC # Express 2010)

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

Я написал этот код, чтобы: а) получить доступ к форме Windows; б) добавить страницу с вкладками.

Код компилируется просто отлично, но страница Tabpage не отображается во время выполнения.

 static class Program
{
    [STAThread]
    static void Main()
    {
        Application.SetCompatibleTextRenderingDefault(false);
        Application.EnableVisualStyles();
        Form1 ApplicationMainForm = new Form1();
        Application.Run(ApplicationMainForm); //LABEL B

        ApplicationMainForm.tabControl1.TabPages.Add("MyPage"); //LABEL A
    }
}
  

Как я могу заставить форму отображать мою страницу с вкладками?
Моя страница с вкладками отображается, когда строки A и B меняют положение. Мне не хватает метода обновления, или добавление TabPage никогда не вызывается, пока приложение не закроется?

Правка # 1: некоторые незначительные правки. Правка # 2: Отредактировано в другом коде примера. Правка # 3: Удалены некоторые более ранние / нерелевантные моменты. Правка # 4: Нашел подсказку и отредактировал эту информацию в

Комментарии:

1. Не могли бы вы показать код, который вы пытались использовать до сих пор? Не совсем понятно, что вы пытаетесь сделать и в чем ваша проблема.

2. Вы получаете исключение при сбое программы? Если да, пожалуйста, опубликуйте это здесь.

3. Разгадал загадку. Я почему-то предположил, что форма выполняется в своем собственном потоке — это не так. Добавление работает просто отлично, мне просто нужно переосмыслить, как я хочу, чтобы моя программа работала. Я приму первый ответ, в котором говорится, что 🙂

Ответ №1:

 Form1.tabControl1.Controls.Add(myNewTabItem);
  

Элемент управления tab представляет собой набор страниц вкладок, поэтому вы добавляете страницы вкладок так же, как вы добавляете любой элемент управления в коллекцию. Обратите внимание, что вкладки отображаются в том порядке, в котором вы их добавили.

Комментарии:

1. Смотрите также TabControl и ControlCollection

Ответ №2:

Если вы пытаетесь добавить вкладку в форму во время выполнения, вероятно, проблема заключается в том, что вы пытаетесь настроить определение формы вместо конкретного экземпляра этой формы, который вы в данный момент отображаете. Когда форма открыта, это экземпляр определения формы. Вы должны найти этот экземпляр, чтобы изменить его свойства. Следовательно, вам нужно, чтобы другая часть вашей программы каким-то образом знала об этом конкретном экземпляре вашей формы через что-то вроде ссылочной переменной.

Комментарии:

1. Да, это имело к этому отношение… Я попытался инициализировать такую форму XYZ = new Form1(); … который не мог работать. Другая проблема заключалась в том, что я не вызывал rendering default перед инициализацией.