WinForm: Form 클래스의 프로퍼티를 조절, 윈도우 모양 바꾸기(Width/Height)

00·2025년 1월 4일

C#

목록 보기
115/149
using System;
using System.Windows.Forms; // 윈도우 응용 프로그램을 만들기 위한 네임스페이스


// 윈도우 창을
namespace FormSize
{
    class MainApp : Form // Form 클래스를 상속받는 MainApp 클래스 정의
    {
        static void Main(string[] args)
        {

            MainApp form = new MainApp(); // MainApp의 새 인스턴스를 생성합니다.
            form.Width = 300; // 폼의 너비를 300으로 설정합니다.
            form.Height = 200; // 폼의 높이를 200으로 설정합니다.


            form.MouseDown += new MouseEventHandler(form_MouseDown); // 폼의 MouseDown 이벤트에,
                                                                     // form_MouseDown 메서드(이벤트 처리기 메서드)를 연결(등록)합니다.
                                                                     
                                                                     // MouseDown:
                                                                     // MouseDown 이벤트로서,
                                                                     // Form 클래스에 미리 선언되어 있습니다.
                                                                     // MouseEventHandler:
                                                                     // MouseDown 이벤트의 대리자로서,
                                                                     // Form 클래스에 미리 정의되어 있습니다.


            Application.Run(form); // 폼을 표시하고 메시지 루프를 시작합니다.
        }


        static void form_MouseDown(object sender, MouseEventArgs e) 
            // 마우스 버튼을 누를 때 발생하는 이벤트를 처리하는 메서드(이벤트 처리기 메서드) 선언
        {
            Form form = (Form)sender; // 이벤트를 발생시킨 객체를 Form 타입으로 변환합니다.
            int oldWidth = form.Width; // 폼의 현재 너비를 oldWidth 변수에 저장합니다.
            int oldHeight = form.Height; // 폼의 현재 높이를 oldHeight 변수에 저장합니다.


            if (e.Button == MouseButtons.Left) // 마우스 왼쪽 버튼을 누르면
            {
                if (oldWidth < oldHeight) // 현재 너비가 높이보다 작으면
                {
                    form.Width = oldHeight; // 너비를 높이 값으로 변경합니다.
                    form.Height = oldWidth; // 높이를 너비 값으로 변경합니다.
                }
            }

            else if (e.Button == MouseButtons.Right) // 마우스 오른쪽 버튼을 누르면
            {
                if (oldHeight < oldWidth) // 현재 높이가 너비보다 작으면
                {
                    form.Width = oldHeight; // 너비를 높이 값으로 변경합니다.
                    form.Height = oldWidth; // 높이를 너비 값으로 변경합니다.
                }
            }
            Console.WriteLine("윈도우의 크기가 변경되었습니다"); // "윈도우의 크기가 변경되었습니다" 메시지를 출력합니다.
            Console.WriteLine($"Width: {form.Width}, Height: {form.Height}"); // 변경된 폼의 너비와 높이를 출력합니다.
        }
    }
}

/*
출력 결과

윈도우의 크기가 변경되었습니다
Width: 200, Height: 300
윈도우의 크기가 변경되었습니다
Width: 300, Height: 200
윈도우의 크기가 변경되었습니다
Width: 200, Height: 300
윈도우의 크기가 변경되었습니다
Width: 300, Height: 200
 */

코드 설명

using System;
using System.Windows.Forms; // 윈도우 폼 애플리케이션을 만들기 위한 네임스페이스

namespace FormSize
{
    class MainApp : Form // Form 클래스를 상속받는 MainApp 클래스 정의
    {
        static void Main(string[] args)
        {
            MainApp form = new MainApp(); // MainApp의 새 인스턴스를 생성합니다.
            form.Width = 300; // 폼의 너비를 300으로 설정합니다.
            form.Height = 200; // 폼의 높이를 200으로 설정합니다.

            form.MouseDown += new MouseEventHandler(form_MouseDown); // 폼의 MouseDown 이벤트에 form_MouseDown 메서드를 연결합니다.

            Application.Run(form); // 폼을 표시하고 메시지 루프를 시작합니다.
        }

        static void form_MouseDown(object sender, MouseEventArgs e) // 마우스 버튼을 누를 때 발생하는 이벤트를 처리하는 메서드
        {
            Form form = (Form)sender; // 이벤트를 발생시킨 객체를 Form 타입으로 변환합니다.
            int oldWidth = form.Width; // 폼의 현재 너비를 oldWidth 변수에 저장합니다.
            int oldHeight = form.Height; // 폼의 현재 높이를 oldHeight 변수에 저장합니다.

            if (e.Button == MouseButtons.Left) // 마우스 왼쪽 버튼을 누르면
            {
                if (oldWidth < oldHeight) // 현재 너비가 높이보다 작으면
                {
                    form.Width = oldHeight; // 너비를 높이 값으로 변경합니다.
                    form.Height = oldWidth; // 높이를 너비 값으로 변경합니다.
                }
            }
            else if (e.Button == MouseButtons.Right) // 마우스 오른쪽 버튼을 누르면
            {
                if (oldHeight < oldWidth) // 현재 높이가 너비보다 작으면
                {
                    form.Width = oldHeight; // 너비를 높이 값으로 변경합니다.
                    form.Height = oldWidth; // 높이를 너비 값으로 변경합니다.
                }
            }
            Console.WriteLine("윈도우의 크기가 변경되었습니다"); // "윈도우의 크기가 변경되었습니다" 메시지를 출력합니다.
            Console.WriteLine($"Width: {form.Width}, Height: {form.Height}"); // 변경된 폼의 너비와 높이를 출력합니다.
        }
    }
}

코드 설명

이 C# 코드는 System.Windows.Forms 네임스페이스를 사용하여 윈도우 폼의 크기를 마우스 클릭으로 변경하는 예제입니다.

  • MainApp 클래스는 Form 클래스를 상속받아 윈도우 폼을 나타냅니다.
  • Main 메서드는 MainApp 폼의 인스턴스를 생성하고, 초기 크기를 설정합니다. 그리고 MouseDown 이벤트에 form_MouseDown 메서드를 연결하고, 폼을 실행합니다.
  • form_MouseDown 메서드는 마우스 버튼을 누를 때 발생하는 이벤트를 처리합니다. 마우스 왼쪽 버튼을 누르면 너비가 높이보다 작을 때, 마우스 오른쪽 버튼을 누르면 높이가 너비보다 작을 때 폼의 너비와 높이를 서로 바꿉니다.

추가 설명

  • MouseDown 이벤트는 마우스 버튼을 누를 때 발생합니다.
  • MouseEventArgs 클래스는 마우스 이벤트에 대한 정보를 제공합니다. Button 프로퍼티는 어떤 마우스 버튼이 눌렸는지 나타냅니다.
  • Application.Run() 메서드는 폼을 표시하고 메시지 루프를 시작합니다.

Form form = (Form)sender; 이 부분이 필요한 이유?

form_MouseDown 메서드는 마우스 이벤트가 발생했을 때 호출되는데,
이때 sender는 이벤트가 발생한 폼 객체를 나타냅니다. 하지만 senderobject 타입으로 전달되기 때문에, Form 클래스의 WidthHeight 프로퍼티에 접근하려면 Form 타입으로 형변환해야 합니다.

Form form = (Form)sender; 이 코드는 sender 객체를 Form 타입으로 형변환하여 form 변수에 저장하는 것입니다. 이렇게 하면 form 변수를 통해 Form 클래스의 WidthHeight 프로퍼티에 접근할 수 있습니다.

쉽게 설명하면, sender는 마치 "동물"이라고만 알려진 상태이고, Form form = (Form)sender;는 "동물"이 "강아지"라는 것을 알게 되어 "강아지"의 특징(짖기, 꼬리 흔들기 등)을 사용할 수 있게 되는 것과 같습니다.

0개의 댓글