Windows 양식이 최소화되는시기를 감지하는 방법은 무엇입니까?


84

WindowState로 현재 상태를 얻을 수 있다는 것을 알고 있지만 사용자가 양식을 최소화하려고 할 때 발생하는 이벤트가 있는지 알고 싶습니다.

답변:


122

Resize 이벤트를 사용하고 이벤트에서 Forms.WindowState 속성을 확인할 수 있습니다.

private void Form1_Resize ( object sender , EventArgs e )
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Do some stuff
    }
}

2
이것은 예외를 삼킬 수 있는 장소 중 하나 인 것 같습니다 .
Jonathon Reinhart 2013

1
이것도 필요합니다 .Resize + = new System.EventHandler (this.Form1_Resize);
Tom

79

에 얻으려면 전에 양식 당신이의 WndProc 절차에 후크해야합니다 최소화하고있다 :

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020; 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE)
                {
                    // Do your action
                }
                // If you don't want to do the default action then break
                break;
        }
        base.WndProc(ref m);
    }

양식이 최소화 된 반응하려면 Resize다른 답변이 지적한대로 이벤트에 연결 하십시오 (완전성을 위해 여기에 포함됨).

private void Form1_Resize (object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do your action
    }
}

0xF030은 일반 창 상태에서 최대화 할 때입니다. 창문 표시 줄에서 최대화 할 때 0xF120입니다
k4yaman

실제로 이것은 Minimize Click 이벤트 만 잡습니다 ! 당신이 찾고있는 WM_SIZE (0x0005) SIZE_MINIMIZED (1)입니다
오리 Nachum

17

나는 알지 못한다 특정의 이벤트,하지만 Resize폼이 최소화 될 때 이벤트가 발생, 당신은 확인할 수 있습니다 FormWindowState.Minimized해당 이벤트에


2
이것은 개인 "lastState"플래그와 결합 된 가장 쉬운 방법입니다.
Matthew Scharley 2009-06-27

7

이벤트를 최소화하는 WPF 창을 검색하는 사용자 :

조금 다릅니다. 콜백의 경우 WindowState를 사용합니다.

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do some stuff
    }
}

사용할 이벤트는 StateChanged입니다 (대신 Resize).

public Main()
{
    InitializeComponent();
    this.StateChanged += Form1_Resize;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.