1

派生したにカプセル化されたコントロールがあり、派生したを含むTabPageフォームにドッキングするのに問題があります。MainFormTabPage

TabPageとコントロールを正しく追加しましたが、に表示されていMainFormます。ただし、コントロールは正しくドッキングされていません(スタイル:塗りつぶし)。フォームのサイズを変更することで、これを確認できます。

プロパティ_control.Dock = System.Windows.Forms.DockStyle.Fill_control.Anchor = Left | Right | Top | Bottom派生TabPageのコンストラクターを設定しました。

以下はコードのサンプルです。

public class DerivedTab : TabPage {
    public DerivedTab(){
        ...
        _control= new BrightIdeasSoftware.TreeListView();
        this.Controls.Add(this._control);
        _control.Anchor = System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom;
        _control.Dock = System.Windows.Forms.DockStyle.Fill;
        ...
    }
}

MainForm、これは実行時に派生タブを作成する関数です。

    private DerivedTab CreateTab(string name)
    {
        DerivedTab tab = new DerivedTab(this, name);
        tab.SuspendLayout();

        MainTab.Controls.Add(tab);
        return tab;
    }

とにかく、私はVisual Studio Designerを使用してこのコードを生成し、コントロールは正しくドッキングします。次に、タブページのクラスを作成し(これらのタブの数はさまざまであるため)、タブページに関連するすべてのものをCreateTab関数にコピーしました。タブページのプロパティに関連するものはすべてコンストラクターに移動しました。コントロールを派生にカプセル化し、コントロールにTabPage関連するすべてを派生タブページに移動しました。

だから、私は何が欠けていますか?イベントハンドラー関数を実装せずに、カプセル化されたコントロールをドッキングすることは可能ですか?

4

1 に答える 1

1

私は自分の問題の解決策を見つけました。TabPageが正しくドッキングするためにTabControlがTabPageを追加した後、ResumeLayoutを呼び出す必要があります。

private DerivedTab CreateTab(string name)
{
    DerivedTab tab = new DerivedTab(this, name);
    tab.SuspendLayout();

    MainTab.Controls.Add(tab);
    tab.ResumeLayout();
    return tab;
}
于 2013-01-06T13:55:46.337 に答える