나는 C#에서 사용자 정의 된 TabControl
클래스를 작성합니다. (생성자에 의해 호출된다)수동으로 TabControl.DisplayRectangle 업데이트
내 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에 두 개의 구형면을 사용하는 단계;
- 전체 제어
- I는
DisplayRectangle
을 조정 원하는대로 제어 부분TabPage
콘텐츠
를 표시이다 DisplayRectangle
포함 된 ClientRectangle
, I는 (그것의 속성을 재정의하는) 만 얻을 수있다 :
public override Rectangle DisplayRectangle
{
get
{
return this.displayRectangle; // points to a local rectangle, rather than base.DisplayRectangle
}
}
은 그 때 나는 OnSizeChanged
을 무시했습니다 디스플레이 사각형의 크기를 업데이트하기 위해 다음 TabControl
이 크기 다시 때 부모 폼이 최대화 될 때
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;
}
는 내가 발생하고있어 문제는의
DisplayRectangle
작품과 재 크기 따라,하지만/최소화
(따라서 컨트롤 크기를 변경하는 경우), 표시 사각형은 업데이트되지 않습니다.
이 문제를 해결하려면 어떻게해야합니까? 디스플레이 사각형을 수동으로 관리하기위한 지침이 있습니까?
"채우기"로 설정하고 폼의 크기를 변경하면 TabControl의 크기가 변경되고 SizeChange 이벤트가 호출되어 코드가 실행됩니다. 원하는 경우 Main form resizing 이벤트에 의존하여 "수동으로"TabControl의 크기를 조정할 수 있습니다. 하지만 TabControl의 SizeChanged 이벤트가 호출되지 않는 이유를 생각해 낼 수 있습니다. 크기가 변경되지 않았습니다. – varocarbas
당신이하려는 것을보기 어렵습니다. 소유자가 그려주는 것은 페이지가 아닌 탭에만 해당됩니다. 해결하려는 실제 문제를 설명하십시오. –
@HansPassant, 해결했습니다. 문제는 디스플레이 사각형이 변경 될 때 각 TabPage의 경계를 업데이트하지 않는다는 것입니다. 각 TabPage의 경계를 업데이트하자마자 표시 사각형이 자동으로 수정됩니다. – series0ne