출처 : http://naaams.blogspot.kr/2011/02/c-windows-control-layout.html



Visual Studio로 Windows Form 개발을 하고 나서 다른 PC에서 실행시켜보면 폼에 그려놓았던 컨트롤 레이아웃이 원래 개발했던 PC와 다르게 나타나는 경우가 있다.

필자의 경우는 영문 Windows OS에서 개발한 프로그램이 한글 Windows OS과 레이아웃이 일치하지 않는걸 발견할 수 있었다.

지인이 알려준 바에 의하면 Windows OS 버전, 언어팩, 글꼴 등에 의해서 레이아웃 또는 해상도가 알아서 조정된다고 한다.

자동으로 수정되지 않도록 하기 위해서는 Form 컨트롤 속성 중에서 AutoScaleMode 속성을 None으로 설정해 주면 된다.

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;

 

하지만 AutoScaleMode 속성이 None이 아닌 상황에서 Panel 컨트롤 등이 추가되면 해당 폼의 Designer.cs 에 자동적으로 AutoScaleDimensions 속성이 추가되므로 레이아웃 또는 해상도가 변경되는 것을 막기 위해 이 속성을 삭제해 주어야 한다.

Form1.Designer.cs 
AutoScaleMode가 Font인 상황에서 Panel 컨트롤이 추가된 경우

// 
// panel1
// 
this.panel1.Location = new System.Drawing.Point(53, 79);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(200, 100);
this.panel1.TabIndex = 0;
// 
// Form1
// 
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

 

위 코드를 아래와 같이 바꿔주면 다른 OS에서도 레이아웃이 변형되는 일 없이 나타날 것이다.

 
// Form1 
//this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;

 

 

MSDN 참고: 
Windows Forms의 자동 배율 조정 
ContainerControl.AutoScaleDimensions 속성 
AutoScaleMode 열거형



Posted by 요지
,