달나라 노트

C# : Form ClientSize (Window 사용가능한 영역 크기) 본문

C#/C#

C# : Form ClientSize (Window 사용가능한 영역 크기)

CosmosProject 2022. 4. 20. 19:43
728x90
반응형

 

 

 

Form 객체를 이용해서 Window를 한번 띄워봅시다.

 

using System;
using System.Windows.Forms;

class MyProgram
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 300;
        

        Application.Run(fm);
    }
}

그러면 위같은 Window가 뜹니다.

 

코드를 보면 Form의 가로 길이(Width)는 500, 세로 길이(Height)는 300으로 설정했습니다.

 

그래서 나타나는 Window의 크기도 가로 500, 세로 300의 길이를 가지고 있죠.

 

근데 여기서 길이를 의미할 때에는 한 가지 주의할 점이 있습니다.

가로 길이 500, 세로 길이 300 이라는 것은 Window 전체의 크기를 의미합니다.

 

500과 300은 위 이미지에서 빨간색으로 표시한 부분의 길이입니다.

Window에는 최소화, 최대화, 종료 버튼 등이 있는 상태표시줄과 Window의 테두리 등 여러 가지 요소들이 존재합니다.

 

세로 길이를 보시면 상태표시줄까지 빨간색으로 표시되어있죠.

따라서 300이라는 Height값은 상태표시줄까지 포함한 Window 전체의 세로 길이를 의미합니다.

 

 

 

 

우리가 나중에 Window에 여러 요소들을 배치할 때 이 요소들이 상태표시줄에 가려지면 당연히 안될겁니다.

그러면 우리는 Window에서 상태표시줄, Window의 테두리 등을 제외한 실제 사용 가능한 영역의 크기를 알아야합니다.

 

이를 위해선 Form 객체의 ClientSize를 이용하면 됩니다.

 

using System;
using System.Windows.Forms;

class MyProgram
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 300;

        String clientsize = fm.ClientSize.ToString();

        Label lbl = new Label();
        lbl.Parent = fm;
        lbl.Width = 300;
        lbl.Height = 20;
        lbl.Text = $"ClientSize = {clientsize}";


        Application.Run(fm);
    }
}

 

위 코드는 Window에 ClientSize를 표시해주도록 하는 코드입니다.

보시면 Window의 크기는 가로 500, 세로 300으로 지정했으나

ClientSize는 가로 484, 세로 261로 표시되는걸 알 수 있죠.

 

이것은 ClientSize 값은 Window의 상태표시줄, 테두리 등 기타 가용영역을 제외하고 우리가 사용할 수 있는 영역의 크기만을 나타내주기 때문입니다.

 

 

 

 

 

 

 

 

실제 Form을 다루다보면 Form 자체의 크기보다는 ClientSize가 더 유용하고 중요하게 다뤄집니다.

 

Form fm = new Form();
fm.Width = 500;
fm.Height = 300;

 

따라서 Form의 크기를 지정할 때 위처럼 Width와 Height을 지정해주는 것이 아니라 ClientSize를 지정해줄 수 있습니다.

 

using System;
using System.Windows.Forms;
using System.Drawing;

class CardCatch
{
    public static void Main()
    {
        Form fm = new Form();
        fm.ClientSize = new Size(300, 300);

        Application.Run(fm);
    }
}

 

- fm.ClientSize = new Size(300, 300);

위 코드를 보면 ClientSize를 직접 지정하고 있습니다.

여기서 Width, Height값을 따로 주는게 아니라 Size 객체에 담아 전달해야한다는 것에 주의합시다.

 

위 코드를 실행하면 이처럼 ClientSize의 가로 길이가 300, 세로 길이가 300인 Window가 만들어집니다.

 

 

 

 

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 300;

        String clientsize = fm.ClientSize.ToString();

        Button btn = new Button();
        btn.Parent = fm;
        btn.Text = "Test Button";
        btn.Size = fm.ClientSize;


        Application.Run(fm);
    }
}

 

이러한 ClientSize값을 이용하면 위처럼 버튼의 크기를 Window의 가용영역에 완전히 딱 맞도록 설정할 수도 있습니다.

 

 

 

 

 

- 참고

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.form.clientsize?view=windowsdesktop-6.0 

 

Form.ClientSize 속성 (System.Windows.Forms)

폼의 클라이언트 영역 크기를 가져오거나 설정합니다.

docs.microsoft.com

 

 

 

 

 

 

728x90
반응형
Comments