반응형

C# Winform : Detect Resize (크기 변화 감지)

알게된 배경

 운영체제 별로 화면의 화소 사이즈가 다르며, 또 사용자에 따라서 편한 크기가 있다. 이 때문에 동적으로 크기를 바꿔줘야 한다. 때문에 창의 크기가 편할때 이를 감지를 하는 것은 제품을 만들기 위해서 중요한 문제일 수 있다.


 물론 이쁘고 동적인 UI를 만든다면, 가능하면, WPF를 쓰는 방법도 현명한 선택이 될 수 있다.



소스코드

 참조한 문서에 의하면, 별로 안어렵다고 한다. 기존에 크기 변화를 감지하는 메서드를 override를 하여서 추가 시킬 수 있다. 아래의 소스코드는 생성된 초기 디자인에서 코드보기를 한뒤에 작성하였다.


// Proect name = TestResize
using System;
using System.Windows.Forms;
namespace TestResize
{
    public partial class Form1 : Form
    {
        public ResizeForm()
        {
            InitializeComponent();
            mLastState = this.WindowState;
        }

        private FormWindowState mLastState;

        protected override void OnClientSizeChanged(EventArgs e)
        {
            // 폼의 크기가 바뀔때마다 인식
            if (this.WindowState != mLastState)
            {
                // 최대, 최소, 보통 등 상태가 변할때 마다 실행됨
                mLastState = this.WindowState;
                OnWindowStateChanged(e);
            }
            else
            {
                Console.WriteLine("Detect resize: {0}, {1}", Size.Width, Size.Height);
            }
            base.OnClientSizeChanged(e);
        }

        protected void OnWindowStateChanged(EventArgs e)
        {
            Console.WriteLine("Window State: {0}", WindowState);
        }
    }
}



빌드로 실행하기 전에 프로젝트 속성의 옵션 항목중에 "응용 프로그램" --> "출력형식" --> "콘솔 응용프로그램"으로 해야 콘솔창을 통해 코드가 작동이 되는지 확인할 수 있다.



참조자료

MSDN 포럼(영문)



반응형

'C#' 카테고리의 다른 글

C# .NET : SQLLocalDB (1) 개요와 오류사례  (0) 2018.03.23
C# : this와 base  (0) 2018.02.20
C# : Queue VS ConcurrentQueue  (0) 2018.02.02
C# : 닷넷에서 Broadcast UDP를 보내기(1)  (0) 2018.01.29
C# : const vs readonly  (0) 2017.10.25

+ Recent posts