UIにデータを表示するために再利用されるコントロールのコレクションを含むユーザーコントロールがあります。フォーム上の別のコンテナ(たとえば、パネル)からコントロールの親を変更し、新しいタブページを作成してから、コントロールをタブページに追加する「ポップアウト」オプションを実装しようとしました。
残念ながら、コントロールがTabPageに追加されると、そのサイズは最後の親で提示された方法にロックされているように見えます。
ParentChangedイベントをオーバーライドして、コントロールが実際にTabPageに追加されたことを検出しました。サイズを調べる場合は、サイズをTabPageのClientRectangleに設定してから、サイズを再調べしてください。サイズは変更されません。Dockプロパティを設定しても、この動作(特に塗りつぶし)は変更されません。
protected override void OnParentChanged(EventArgs e)
{
if (this.Parent != null)
{
Size oldSize = this.Size;
this.Size = this.Parent.ClientRectangle.Size;
if (this.Size == oldSize)
{
// this is where we end up
throw new Exception("We didn't change size!");
}
}
}