Visual studio-TabControl.TabPages.Вставка не работает

вот мой код:

    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();    
    }

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

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

запуск этого кода, 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? Почему это работает?

2 ответов


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

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

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

IntPtr h = this.tabControl1.Handle;

перед тем, как цикл над вашими услугами


вы передаете тот же индекс в 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);
// ...

}