Form과 UserControl의 AutoScaleMode 속성

|

우선 AutoScaleMode 속성에 대한 MSDN입니다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.containercontrol.autoscalemode.aspx

다음은 AutoScaleMode 열거 형에 대한 MSDN입니다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.autoscalemode.aspx

AutoSacleMode 열거 형은 None, Font, Dpi, Inherit 이렇게 4가지가 존재합니다.

None : 자동 스케일 변경 없음
Font : 폰트 사이즈에 따른 스케일 변경
Dpi : 화면 해상도 Dpi 변경에 따른 스케일 변경
Inherit : 부모의 상태를 따름

기본적으로 Form과 UserControl은 Font로 설정되어져 있습니다.
이 설정은 Font가 변경이 되면 Form과 UserControl의 크기가 재조정되고 내부의 컨트롤들의 위치도 재배치됩니다.
이렇게 되면 원하지 않는 UI가 나오게 되기 때문에 이 설정은 이용하지 않는 것이 좋겠습니다.

그냥 무조건 개발 당시의 화면으로 나오게 하고 싶으면 None을 이용하면 됩니다.
None은 윈도우의 Dpi 변경해도 동일한 화면크기로 프로그램이 실행됩니다.

현재 대부분의 모니터가 96dpi로 맞추어져서 나오기 때문에 None을 이용하여 고정하여도 되지만
나중에 나오는 모니터의 dpi가 96dpi로 나온다는 보장이 없기 때문에 Dpi를 이용하여 윈도우의 Dpi변경에 의한
자동 사이즈 변경이 가능하도록 개발하는 것이 좋겠습니다.

Dpi로 설정할 시에 주의할 점이 있습니다.
각 컨트롤의 사이즈가 자동으로 조정하지만 이미지의 사이즈는 설정한 대로 나온다는 것입니다.
이미지를 Tile옵션으로 하면 이미지컨트롤의 사이즈가 변경이 되어도 이미지 자체의 사이즈는 변경되지 않기 때문에
Stretch옵션을 이용하여 컨트롤 사이즈가 변하면 이미지도 따라 변하게 만들어 주어야 합니다.
또 한가지는 UserControl의 AutoScaleMode 속성은 Inherit으로 설정하여야 한다는 것입니다.
UserControl의 AutoScaleMode 속성도 Dpi로 할 경우에 UserControl내의 컨트롤의 사이트와 위치가
원하지 않게 나타납니다. ( 원인은 저도 모릅니다만 아마 UserControl의 AutoScaleMode가 먼저 적용된 뒤에 Form이 적용되면서 이상해 지지 않나 싶습니다. )
  ( 주의할점 추가 - SplitContainer를 이용할 경우에도 이상한 UI로 변경됩니다. )

앞으로 AutoScaleMode속성은 Form의 경우에는 Dpi로 UserControl의 경우에는 Inherit으로 설정하도록 합시다.

And