IT/C#

[C#] Form UI Control 사이즈 일괄 변경하기 FHD to UHD(4K)

Ella.J 2022. 12. 29. 10:27
728x90
반응형

 

Form 내의 Control들을 다 불러와서 기존 FHD 사이즈에 맞게 생성된 UI를

UHD(4K) 사이즈로 변경해 준다. (1920*1080 -> 3840*2160 ; 2배)

고정 UI로 만들었던 프로그램의 컨트롤 개수가 많고 일일이 변경하기 어려운 경우 유용하게 쓰일 수 있다.

컨트롤 사이즈와 위치를 변경해주고, 폰트나 이미지가 사용된 컨트롤은 폰트와 이미지 사이즈도 변경해 준다.

아래 Change4KUI 함수의 [ if (control.GetType() == typeof(Button)) ] 같이

추가로 사이즈 조정이 필요한 컨트롤은 해당 컨트롤 타입으로 확인하여 추가로 필요한 코드를 작성해 준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Control[] formControl;
 
public Form1()
{
    InitializeComponent();
 
    //Form Control List 만들기
    formControl = new Control[] { this };
    //4K UI로 변경하기
    foreach (Control frmControl in formControl)
    {
        Change4KUI(frmControl);
    }
}
 
//폼 내의 모든 컨트롤 불러오기
public static Control[] GetAllControlsUsingRecursive(Control containerControl)
{
    List<Control> allControls = new List<Control>();
    foreach (Control control in containerControl.Controls)
    {
        allControls.Add(control);
        if (control.Controls.Count > 0)
        {
            allControls.AddRange(GetAllControlsUsingRecursive(control));
        }
    }
    return allControls.ToArray();
}
 
//폼 4K UI 사이즈로 변경
void Change4KUI(Control frmControl) //1920 * 1080 => 3840 * 2160
{
    //Form 화면 크기 조정
    frmControl.Width *= 2;
    frmControl.Height *= 2;
    Control[] controls = GetAllControlsUsingRecursive(frmControl);
    foreach (Control control in controls)
    {
        //컨트롤 사이즈 및 위치 변경
        control.Width *= 2;
        control.Height *= 2;
        control.Left *= 2;
        control.Top *= 2;
        //버튼, 라벨 아이콘 이미지 사이즈 조정
        if (control.GetType() == typeof(Button))
        {
            Button btnControl = (Button)control;
            if (btnControl.Image != null) btnControl.Image = (Image)(new Bitmap(btnControl.Image, new Size(btnControl.Image.Width * 2, btnControl.Image.Height * 2)));
        }
        else if (control.GetType() == typeof(Label))
        {
            Label lblControl = (Label)control;
            if (lblControl.Image != null) lblControl.Image = (Image)(new Bitmap(lblControl.Image, new Size(lblControl.Image.Width * 2, lblControl.Image.Height * 2)));
        }
        //PictureBox BackgroundImage 사이즈 조정
        else if (control.GetType() == typeof(PictureBox))
        {
            PictureBox pbControl = (PictureBox)control;
            if (pbControl.BackgroundImage != null) pbControl.BackgroundImage = (Image)(new Bitmap(pbControl.BackgroundImage, new Size(pbControl.BackgroundImage.Width * 2, pbControl.BackgroundImage.Height * 2)));
        }
        //폰트 사이즈 조정
        if (control.Font != null)
        {
            control.Font = new Font(control.Font.FontFamily, (int)(control.Font.Size * 1.5), control.Font.Style);
        }
    }
}
cs

 

728x90
반응형