2

System.Windows.Forms.Form을 상속하는 폼 기본 클래스 BaseForm이있는 Company.UI.Forms 네임 스페이스가 있습니다.디자인 타임에 사용자 정의 컨트롤의 크기 제한

콘크리트 폼 (ExampleForm)이 BaseForm에서 파생되는 경우 VS 디자이너보기에서 고정 크기 여야하므로이 양식의 크기를 제한해야합니다. 고정 크기는 어떤 식 으로든 (BaseForm ctor?에서) 설정하거나 정의해야합니다. 그러면 파생 된 ExampleForm과 디자이너가 선택합니다.

그럴 수 있습니까?

[편집] 디자이너의 자식 컨트롤을 레이아웃 할 수있는 알려진 크기의 Windows CE 장치에 대한 전체 화면 폼의 기본 클래스를 템플릿으로 사용합니다.

+1

런타임에 크기를 조정할 수 있습니까? 아니면 고정 된 크기입니까? – Pondidum

+0

고정. 목적은 기본 클래스를 알려진 화면 크기의 Windows CE 장치에 대한 전체 화면 폼의 템플릿으로 사용하는 것입니다. 디자이너는 디자이너에서 자식 컨트롤을 배치 할 수 있기를 원합니다. –

+0

두 번째 답변이 도움이되지 않았습니까? – jmservera

답변

1

나는이 유형의 시나리오에 대한 직접 지원이 있다고 생각하지 않습니다. Form의 최대 크기를 제어하는 ​​모든 값은 하위 폼에 의해 재정의 될 수 있습니다. 그러므로 재산의 관점에서 그것을 제한 할 방법이 없다.

내가 생각할 수있는 유일한 방법은 크기가 변경된 메서드를 재정의하고 크기가 최대 크기로 다시 설정하는 것입니다. 이것은 약간 나쁜 영향을 미칠지도 모르지만 해결책으로 해결하기 전에 만료해야합니다.

2

표준 WinForms에서는 SetBoundsCore 메서드를 재정의 할 수 있습니다. 이 코드는 디자인 타임에 변경하는 기본 클래스를 방지 ...하지만 어쨌든 상속 클래스에 의해 오버라이드 (override) 할 수있다 기억 :

protected override void SetBoundsCore(int x, int y, 
    int width, int height, BoundsSpecified specified) 
{ 
    if (this.DesignMode) 
    base.SetBoundsCore(x, y, 500, 490, specified); 
    else 
    base.SetBoundsCore(x, y, width, height, specified); 
} 

내가 넣어 한 디자인 타임에로 지정했기 때문에 경우, 런타임에 크기 조정을 원하지 않으면 제거하십시오.

+0

.Net CF ... :-( –

+0

죄송 합니다만, CF에 대해 알지 못했습니다. – jmservera

+0

다른 대답으로 다른 해결책을 참조하십시오 ... – jmservera

2

이 좋아, 이제 CF를 들어, 빠른 해결, 당신은 우리가 이름 UserControl을에서 "Button1을"이 버튼을 가정

public BaseForm() 
{ 
InitializeComponent(); 
this.Size=new Size(20,20); 
} 


bool resizing; 

protected override void OnResize(EventArgs e) 
{ 
if(!resizing) 
{ 
    resizing = true; 
    try 
    { 
    this.Size = new Size(20, 20); 
    } 
    finally 
    { 
    resizing = false; 
    } 
} 
else 
    base.OnResize(e); 
} 
+0

그리고 나서 파생 클래스는 OnResize를 무시하고 아무 것도 수행하지 못합니다. – ctacke

+0

물론, 일반적으로 실수로 디자이너의 크기를 변경하지 않으려면 개발자의 손을 묶어서는 안되며, "VS 디자이너보기에서 크기가 고정되어 있어야합니다"라는 질문을 읽으십시오. – jmservera

0

... 필드에 크기를 저장하여 청소기 코드를 할 수 있습니다 . 디자인 타임에 usercontrol 크기를 변경하는 동안 button1의 크기는 usercontrol의 크기와 인접해야합니다.

이 용액 작업 속성.

(사용자 정의 컨트롤의 Resize 이벤트에서 이것을 작성하십시오.)

private void ButtonDesigned_Resize(object sender, EventArgs e) 
    {    
     button1.Size = new Size(this.Size.Width - 2, this.Size.Height - 2); 

     // Note : this.size hint to usercontrol size 

     or 

     button1.Size = this.Size 
    } 

영어가 적합하지 않습니다.이 솔루션으로 충분하지 않습니다.

관련 문제