26

これが私のコードです:

    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 が既に 1 つあります。この静的タブの前に動的に作成されたタブを挿入したい。

このコードを実行すると、タブコントロールは静的タブページのみを表示します。

この変更を行う場合:

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

Add メソッドを使用すると、すべてのページが表示されます。しかし、私は私が望む順序を取得しません。

Insert メソッドでわからないことはありますか? なぜ機能していないのですか?

4

3 に答える 3

49

social.msdnに関するコメントがありますが、ドキュメントには次のようなものは見つかりませんでした。

Insert メソッドを機能させるには、TabControl のハンドルを作成する必要があります。

上記のコードを試してください

IntPtr h = this.tabControl1.Handle;

サービスをループする前に

于 2009-10-07T15:48:09.990 に答える
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);
// ...

}
于 2009-10-07T16:01:31.713 に答える