Подтвердить что ты не робот

Visual studio - TabControl.TabPages.Insert не работает

Здесь мой код:

    public MainForm()
    {
        InitializeComponent();

        MyServiceSettings obj = (MyServiceSettings)ConfigurationManager.GetSection("MyServiceSettings");

        foreach (MyServiceConfigElement service in obj.Services)
            CreateServiceControl(service);
    }

    private void CreateServiceControl(MyServiceConfigElement service)
    {
        TabPage tp = new TabPage(service.Name);
        tabControl1.TabPages.Insert(0, tp);
        //tabControl1.TabPages.Add(tp);
        tabControl1.Refresh();    
    }

В двух словах он читает раздел в файле конфигурации и создает вкладку для каждого элемента раздела.

У меня уже есть один статический TabPage, созданный во время разработки. Я хочу, чтобы динамические созданные вкладки были вставлены перед этой статической вкладкой.

Запустив этот код, tabcontrol показывает только статическую закладку.

Если я сделаю это изменение:

        private void CreateServiceControl(SoftInfoServiceConfigElement service)
    {
        TabPage tp = new TabPage(service.Name);
        //tabControl1.TabPages.Insert(1, tp);
        tabControl1.TabPages.Add(tp);
        tabControl1.Refresh();
    }

Использование метода Add показывает все страницы. Но я не получаю заказ, который я хочу.

Есть ли что-то, что я не понимаю с помощью метода Insert? Почему он работает?

4b9b3361

Ответ 1

Есть комментарий social.msdn - хотя я не мог найти ничего подобного в документации:

Должен быть создан дескриптор TabControl для работы метода Insert

Попробуйте упомянутый код

IntPtr h = this.tabControl1.Handle;

перед тем, как вы закроете свои службы

Ответ 2

Вы передаете тот же индекс методу Insert(). Если вы хотите просто увеличивать, это должно работать:

// ...

int i = 0;
foreach (MyServiceConfigElement service in obj.Services)
            CreateServiceControl(service, i++);

// ...

private void CreateServiceControl(MyServiceConfigElement service, int i)
{
        TabPage tp = new TabPage(service.Name);
                tabControl1.TabPages.Insert(i, tp);
// ...

}