2009-09-30 4 views
2

모든 사용자 지정 UserControl 개체에서 상속하는 일련의 UserControls 만들려고합니다. 구현하고자하는 핵심 동작 중 하나는 컨트롤 크기에 맞게 모든 컨트롤의 크기를 동적으로 조정할 수 있다는 것입니다.상속 된 UserControl에서 초기 치수 얻기

이렇게하려면 컨트롤의 처음 너비와 높이를 크기 조정 된 치수와 비교해야합니다. 상속 된 컨트롤에서 InitializeComponent()를 호출 한 후 생성자에 코드를 삽입하여 차원을 가져올 수 있습니다. 기본 객체 코드에서이 작업을 수행 할 수있는 방법이 있습니까?

또한 더 나은 접근 방법이있는 경우 제안에 대한 답변을드립니다.

답변

2

모든 기본 컨트롤의 고정 크기로 기본 컨트롤의 크기를 사용하는 결과가 발생했습니다. 이것은 SetBoundsCore() 메소드를 재정 의하여 할 매우 쉬웠다 :

public partial class BaseControl : UserControl 
{ 
    private int _defaultWidth; 
    private int _defaultHeight; 

    public BaseControl() 
    { 
     InitializeComponent(); 

     _defaultWidth = this.Width; 
     _defaultHeight = this.Height; 
    }   

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) 
    { 
     if (this.DesignMode) 
     { 
      width = _defaultWidth; 
      height = _defaultHeight; 
     } 

     base.SetBoundsCore(x, y, width, height, specified); 
    } 
}  

모든 컨트롤 BaseControl가 자동으로 고정 된 크기를 기본값으로 상속.

런타임에 크기 조정 코드는 _idthWidth 및 _defaultHeight 멤버와 비교하여 새 너비 및 높이를 기준으로 크기 조정 비율을 계산합니다.

1

사용자 정의 컨트롤에서 컨테이너의 모든 컨트롤의 도킹 및 고정 특성을 활용하십시오. 사용자 정의 컨트롤의 크기 나 크기가 조정되면 내용이 자동으로 조정됩니다. 그런 다음 코드에서 사용자 컨트롤의 크기를 설정하기 만하면됩니다.

+0

컨트롤의 레이아웃을 유지해야하므로 도킹이 작동하지 않습니다. 기본적으로 내가 뭘 하려는지 ComponentOne sizer 비슷합니다. 이를 수행하는 코드는 그리 어렵지 않습니다. 크기를 조정하기 전에 원래 크기를 가져 오는 것입니다. – polara

+0

아마도 나는 충분히 명확하지 않았습니다. 도킹 및 고정을 사용할 수 있습니다. 자식 컨트롤을 도킹 할 필요가 없다면 앵커링 (Anchor 속성) 만 사용하면됩니다. –

+0

UserControl의 모든 단추에 대해 [위쪽, 왼쪽, 아래쪽, 오른쪽]으로 앵커를 설정해 보았습니다. 그들은 크기가 조정되었지만 움직이지 않았고 결과적으로 서로 겹치게되었습니다. – polara