그러냐

C#– Windows 환경에 따른 Control Layout 불일치 본문

c#

C#– Windows 환경에 따른 Control Layout 불일치

관절분리 2016. 1. 28. 11:25
반응형

C#– Windows 환경에 따른 Control Layout 불일치

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 열거형

 

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

반응형