반응형

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
반응형

C# WinForm : 문자 픽셀 측정

알게된 배경

 본의 아니게 C#으로 윈도우 기반으로 간단한 프로그램을 작성하다 보니 몇몇은 나중에 다시 찾기 힘들것 같아서 이러한 것들은 기록으로 남긴다.

 문자 픽셀의 길이 경우 윈도우에서 기본적으로 제공하는 Component 를 동적(코드로)으로 작성할 경우 Label 같은 경우 autoSize를 true로 켜도 최종 크기를 size나 width, height에 갱신이 되지 않았었기 때문에 찾은 방법이다.


매서드 원형

SizeF Graphics.MeasureString(String, Font, Int32)

실제로는 앞의 2개의 인자만 있어도 된다.



예제 소스

using System.Window.Form;
using System.Drawing;

class CustumLabel : Label
{
    public CustumLabel(Sting text)
    {
        Text = "Offline";
        var width = Graphics.MeasureString(Text, Font);
        Width = (int)Math.Ceiling(width);
    }
}


위의 소스코드로 당장 변화를 확인 할 수는 없지만, 나머지도 작성하면 길어지므로 일단은 생략한다.


참조자료

MSDN 문서 Graphics.measureString Method



반응형

+ Recent posts