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는 이벤트가 발생한 폼 객체를 나타냅니다. 하지만 sender는 object 타입으로 전달되기 때문에, Form 클래스의 Width나 Height 프로퍼티에 접근하려면 Form 타입으로 형변환해야 합니다.
Form form = (Form)sender; 이 코드는 sender 객체를 Form 타입으로 형변환하여 form 변수에 저장하는 것입니다. 이렇게 하면 form 변수를 통해 Form 클래스의 Width나 Height 프로퍼티에 접근할 수 있습니다.
쉽게 설명하면, sender는 마치 "동물"이라고만 알려진 상태이고, Form form = (Form)sender;는 "동물"이 "강아지"라는 것을 알게 되어 "강아지"의 특징(짖기, 꼬리 흔들기 등)을 사용할 수 있게 되는 것과 같습니다.