0

フォーム(「疑似タブページ」と考えてください)をタブコントロールに動的に割り当てています。

私はそれをこのようにやっていた:

//メインフォーム。デザイン時にTabControlがあります。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    int TabControlWidth = tabPageBasicInfo.Size.Width;
    int TabControlHeight = tabPageBasicInfo.Size.Height;

    if (e.Node.Name == "NodeWhatever")
    {
        BasicInfoPseudoTab bipt = new BasicInfoPseudoTab(TabControlWidth, TabControlHeight);
        tabPageBasicInfo.Controls.Add(bipt);
        bipt.Show();
    }
    // else NodeThis, NodeThat
}

//「疑似タブページ」であるフォームのコンストラクタ:

// overloaded constructor, passing in the dimensions of the tab page
public BasicInfoPseudoTab(int ATabPageWidth, int ATabPageHeight) 
{
    this.TopLevel = false;
    this.FormBorderStyle = FormBorderStyle.None;
    this.Width = ATabPageWidth;
    this.Height = ATabPageHeight;
    this.Visible = true;
}

...しかし、Dockプロパティを設定してみました。

public BasicInfoPseudoTab(int ATabPageWidth, int ATabPageHeight) 
{
    this.TopLevel = false;
    this.FormBorderStyle = FormBorderStyle.None;
    //this.Width = ATabPageWidth;
    //this.Height = ATabPageHeight;
    this.Visible = true;
    this.Dock = DockStyle.Fill;         
}

...そしてそれはうまく機能するので、2つの引数を取り除いて「ボックス内」コンストラクターを使用するだけだと思いました。ただし、getのように、これは許可されていません。「タイプ'UserControlsOnTabPagePOCApp.BasicInfoPseudoTab'は、同じパラメータータイプを持つ'BasicInfoPseudoTab'というメンバーを既に定義しています。」

Load()イベントは遅すぎます(そこでTopLevelプロパティを設定していたとき、コンストラクターに移動するまでerr msgが表示されました)。

コンストラクターを(オーバーロードするのではなく)オーバーライドするには何をする必要がありますか、または他にどのようなイベントを使用する必要がありますか(Load()イベントの前に何かが発生しますか?)

また(2つの異なる質問に同じコードを入れたくありませんでした):フォーム自体はTabControlに正常に表示されますが、デザイン時にフォーム/疑似タグページに追加したコントロールは実行時に表示されません-時間-なぜですか?

4

1 に答える 1

2

コンストラクターをオーバーライドすることは問題ではありません(コンストラクターはとにかくそのように多形ではありません)-それは既に存在するコンストラクターの問題です。私はそれがあなたのコードにすでに存在していることを期待します-このようなもの:

public BasicInfoPseudoTab()
{
    InitializeComponent();
}

別のパラメーターのないコンストラクターを宣言するのではなく、そのコンストラクターを編集できます。他のコンストラクターは、そのコンストラクターにチェーンするかInitializeComponent()、それ自体を呼び出す必要があります。これにより、すべてのデザイナーコードがその処理を実行できるようになります。

于 2012-03-22T21:40:39.563 に答える