フォーム(「疑似タブページ」と考えてください)をタブコントロールに動的に割り当てています。
私はそれをこのようにやっていた:
//メインフォーム。デザイン時に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に正常に表示されますが、デザイン時にフォーム/疑似タグページに追加したコントロールは実行時に表示されません-時間-なぜですか?