2009-10-07 119 views
18

这里是我的代码:视觉工作室 - 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方法显示的所有页面。但我没有得到我想要的订单。

有什么我不明白的插入方法?为什么它没有工作?

回答

37

有上social.msdn评论 - 虽然我无法找到的文档中这样的事:

的的TabControl的手柄必须插入方法创建工作

尝试提到代码

IntPtr h = this.tabControl1.Handle; 

你遍历你的服务

+1

谢谢。调用这个解决了这个问题。 – vIceBerg 2009-10-07 16:19:31

+2

我不能相信它是如此愚蠢......无论如何它工作! – Zyo 2012-06-07 21:05:05

+0

真棒回答。如此简单但尚未知晓。 +1 – mihirj 2013-05-17 06:50:57

1

您正在向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); 
// ... 

}