2009-10-07 9 views
18

を動作していないが、私のコードです:一言で言えばの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();  
    } 

、それは設定ファイル内のセクションを読み取り、セクション内の各要素のタブを作成します。

デザイン時に既に1つの静的TabPageが作成されています。ダイナミックに作成されたタブをこの静的タブの前に挿入する必要があります。

このコードを実行すると、タブコントロールには静的なタブページのみが表示されます。私はこの変更を行う場合は

:Addメソッドを使用して

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

は、すべてのページが表示されます。しかし、私は欲しい秩序を得ることはできません。

Insertメソッドでわからないことがありますか?なぜそれは働いていますか?

答えて

37

social.msdnにコメントがあります - 私はドキュメントで、このようなものを見つけることができませんでしたが:

Insertメソッドが

言及してみてくださいを動作させるためのTabControlのハンドルを作成する必要がありますあなたのサービスを超えるコードあなたのループの前に

IntPtr h = this.tabControl1.Handle; 

+1

ありがとうございます。これを呼び出すと問題が解決しました。 – vIceBerg

+2

私はそれがとても馬鹿だとは信じられません...とにかくそれは働いています! – Zyo

+0

恐ろしい答え。とてもシンプルだが未知である。 +1 – mihirj

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); 
// ... 

} 
関連する問題