TabControl
C# でカスタム描画クラスを作成しています。
InitializeComponent
コントロールをカスタム描画するために、私のメソッド(コンストラクターによって呼び出されます)は次のように動作します。
private void InitializeComponent()
{
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
this.DrawMode = TabDrawMode.OwnerDrawFixed;
}
TabControl は 2 つの長方形の表面を使用します。
- コントロール
ClientRectangle
全体を含む - コンテンツを表示するコントロールの
DisplayRectangle
部分ですTabPage
を調整したいのでDisplayRectangle
、そのプロパティをオーバーライドしました(これは取得のみです):
public override Rectangle DisplayRectangle
{
get
{
return this.displayRectangle; // points to a local rectangle, rather than base.DisplayRectangle
}
}
OnSizeChanged
次に、表示長方形のサイズを更新するためにオーバーライドしました。
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
this.displayRectangle = this.ClientRectangle;
this.displayRectangle.Y += this.ItemSize.Height + 4;
this.displayRectangle.Height -= this.ItemSize.Height + 4;
}
私が遭遇している問題は、サイズが変更されると、それに応じTabControl
てDisplayRectangle
動作し、サイズが変更されますが、親フォームが最大化/最小化されると (したがってコントロールのサイズが変更されると)、表示長方形が更新されません。
これを修正するにはどうすればよいですか?表示長方形を手動で管理するためのガイドラインはありますか?