Visual studio - TabControl.TabPages.Insert не работает - PullRequest
20 голосов
/ 07 октября 2009

Вот мой код:

    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 отображаются все страницы. Но я не получаю заказ, который хочу.

Есть что-то, чего я не понимаю с помощью метода вставки? Почему это не работает?

Ответы [ 2 ]

43 голосов
/ 07 октября 2009

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

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

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

IntPtr h = this.tabControl1.Handle;

прежде чем вы перейдете к вашим услугам

1 голос
/ 07 октября 2009

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

}
...