2014-11-05 3 views
0

작은 응용 프로그램을 개발하고 있습니다. 나는 AutoScaleMode = Font를 사용하려고 시도하고 하나만 제외하고 모든 내 의도에 대한 매력처럼 작동합니다. 일부 특정 컨트롤에 굵은 텍스트가 필요하지만 폰트 크기가 변경되면 autoscale을 사용하지 마십시오.C# AutoScaleMode 글꼴, 굵게는 조절되지 않습니다.

컨트롤의 기본 글꼴을 변경하지만 AutoScale을 나머지 컨트롤로 변경하는 것이 가능합니까? 사전

답변

1

에서

덕분에 당신은 아마 그것을 할 의도되지 않은 일을 할 글꼴 크기 조정을 사용하고 있습니다. 대상 컴퓨터의 다른 비디오 DPI를 보완하도록 설계되었습니다. 그리고 네, 양식의 글꼴 속성을 변경하여 양식을 rescale 수 있습니다. 하지만 부모의 글꼴을 "상속하지"않는 컨트롤을 사용하면 문제가 생길 수 있습니다. Font 속성을 직접 업데이트해야합니다.

이렇게하면 자동으로 컨트롤을 뒤집어서 상위 글꼴을 상속하지 않는 컨트롤 만 업데이트해야합니다. 이것은 잘 작동 :

public static void ScaleFonts(Control ctl, float multiplier) { 
     foreach (Control c in ctl.Controls) ScaleFonts(c, multiplier); 
     if (ctl.Parent == null || ctl.Parent.Font != ctl.Font) { 
      ctl.Font = new Font(ctl.Font.FontFamily, 
           ctl.Font.Size * multiplier, ctl.Font.Style); 
     } 
    } 

샘플 사용 :

private void Form1_Load(object sender, EventArgs e) { 
     ScaleFonts(this, 1.25f); 
    } 

을 엉망 레이아웃을 받고,이 일을하면서 가능한 고장 모드 레이아웃 이벤트를 트리거합니다. 이유를 설명하기가 어렵습니다. 이것을 해결하려면 Suspend/ResumeLayout()을 호출해야 할 수도 있습니다.