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? Почему он работает?
Ответы
Ответ 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);
// ...
}