Làm thế nào để phát hiện khi một biểu mẫu cửa sổ đang được thu nhỏ?


84

Tôi biết rằng tôi có thể lấy trạng thái hiện tại bằng WindowState, nhưng tôi muốn biết liệu có bất kỳ sự kiện nào xảy ra khi người dùng cố gắng thu nhỏ biểu mẫu hay không.

Câu trả lời:


122

Bạn có thể sử dụng sự kiện Thay đổi kích thước và kiểm tra Thuộc tính Forms.WindowState trong sự kiện.

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

2
Lưu ý rằng đây dường như là một trong những nơi mà Exceptions có thể bị nuốt .
Jonathon Reinhart

1
Bạn cũng cần this.Resize + = new System.EventHandler (this.Form1_Resize);
Tom,

79

Để truy cập trước khi biểu mẫu được thu nhỏ, bạn sẽ phải tham gia vào thủ tục 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);
    }

Để phản ứng sau khi biểu mẫu đã được thu nhỏ, móc vào Resizesự kiện như các câu trả lời khác đã chỉ ra (bao gồm ở đây để hoàn thiện):

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

0xF030 là khi tối đa hóa từ trạng thái cửa sổ bình thường. 0xF120 là khi tối đa hóa từ các cửa sổ thanh
k4yaman

Trên thực tế, điều này chỉ bắt được sự kiện Giảm thiểu nhấp chuột ! Những gì bạn đang tìm kiếm là WM_SIZE (0x0005) & SIZE_MINIMIZED (1)
Ori Nachum

17

Tôi không biết về một sự kiện cụ thể , nhưng Resizesự kiện sẽ kích hoạt khi biểu mẫu được thu nhỏ, bạn có thể kiểm tra FormWindowState.Minimizedsự kiện đó


2
Điều này kết hợp với cờ "lastState" riêng tư là cách dễ nhất để thực hiện nó.
Matthew Scharley

7

Đối với những người tìm kiếm sự kiện thu nhỏ cửa sổ WPF:

Nó hơi khác một chút. Để gọi lại, hãy sử dụng WindowState:

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

Sự kiện sử dụng là StateChanged (thay vì Resize):

public Main()
{
    InitializeComponent();
    this.StateChanged += Form1_Resize;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.