[비주얼 스튜디오 팁]폼 자동 크기 조정, 이유와 해결방법

2018. 2. 28. 00:05Programming/Etc...

안녕하십니까 Nitro입니다.

오늘은 비주얼 스튜디오를 이용하면서, 생기는 문제점을 가져와봤습니다.

생각보다 난감하고 애매한 오류라 많은분들이 모르실것 같네요.

열심히 만들고 진행하던 프로잭트를 배포하거나 다른 컴퓨터로 옮겨서 진행할때,

컨트롤의 배열이 바뀌거나 사이즈가 변경되는일이 간혹 있는데요,

위처럼 736 * 50이 정상적인 크기인 프로그램이


다른 컴퓨터에서 열면 1051 * 83이 되버릴때가 있습니다.


이것때문에 한참 고생을 했었는데요,

한참 구글링을 한 결과, 이는 화면 비율차이에 의한 문제라는것을 알아냈습니다.


첫번째 사진은 일반 23인치 1920 * 1080 크기의 일반 대스크탑에서 진행할때의 사진이였습니다만.

두번째 사진은 13.5인치 2256 * 1504 크기의 서피스 랩탑에서 진행할때의 사진이였습니다.



문제는 여기서 발생하게 되는데요.

첫번째 대스크탑같은경우는 모니터 인치와 픽샐비가 잘 맞아 확대없이 100%의 배율로 윈도우가 셋팅되어있지만,

서피스 랩탑같은경우는 13.5인치라는 작은 모니터에 2256 * 1504의 겁나큰 픽샐비가 들어가기에. 일반 100% 배율로 사용하기 어려웠습니다.

그래서 기본 권장으로도 150% 배율 셋팅이 되어있는데요.


이 과정에서, 똑똑한 비주얼 스튜디오는 비율을 맞춘답시고 자동 크기 조정을 실시해버립니다.

그로 인하여, 특정 픽샐비로 폼 크기가 늘어나게 되어버리는것입니다.


위 문제를 해결할 방법은 2가지가 있습니다.

1. AutoScaleMode를 Dpi로 변경하기

각각 폼 컨트롤의 속성을 살펴보면 AutoScaleMode라는 항목이 Font로 설정되어있을 것입니다.

이를 None 으로 변경하게 되면, 화면 배율이 변경되더라도 프로그램은 그대로 본 상태를 유지하게 됩니다.

이를 Dpi로 변경하게 되면, 화면 배율에 따라 프로그램 크기가 변경됩니다.


장점 : 프로그램을 배포하였을때, Dpi 에 따라 프로그램이 확대, 축소 됨으로 호환성을 높입니다.

(Dpi 설정시, None으로 설정하면 2번째 방법과 효과가 동일함.)


단점 : 하나 하나 다 설정해줘야 합니다. (ㄱㅡ...)


2. 레지스트리 편집하기.

제가 찾은 마이크로소프트 문서입니다.

https://docs.microsoft.com/ko-kr/dotnet/framework/winforms/automatic-scaling-in-windows-forms

중간쯔음 가면 레지를 변경하라고 되어있는데요, 

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe] "dpiAwareness"=dword:00000000

위와 같은 키값을 추가해주면 해결됩니다.


비주얼 스튜디오 자동 크기 조정 비활성화.reg


장점 : 컨트롤 하나하나 속성 변경을 하지 않아도 됩니다.

단점 : Dpi가 다른 컴퓨터에서 실행시 크기가 변합니다.



[결론]
호환성을 위하여 1번째 방법을 선택하시는 분이 계시겠지만, 프로잭트를 처음부터 시작하시는 분들만 추천합니다.
만약 컴퓨터 2대에서 번갈아가면서 코딩하는데 이러한 문제가 생긴다면, Dpi가 다른 컴퓨터에서 2번째 방법인 레지를 적용하시고,
순수 하나하나 설정을 바꿔 주는것이 가장 좋은 방법이라 생각됩니다.
(그것도 귀찮으면 for each로 컨트롤마다 변경해줘도 될듯.)

윽... 이제 서피스 랩탑으로도, 서피스 프로로도 마음데로 코딩할수 있겠군요.

모두들 즐 코딩 되시길..!


반응형