通过最大化按钮调整窗体大小时不会触发 ResizeEnd 事件?

ResizeEnd event is not triggered when resizing the form by maximize button?

在我的应用程序中,ResizeEnd 事件在通过拖动角调整窗体大小时触发,但在我单击最大化按钮时不会触发。

Resize 事件在我的场景中不起作用,所以我需要使用 ResizeEnd 事件。

为什么在通过最大化按钮调整窗体大小时没有触发此事件?或者有人可以提出替代方案吗?

当用户完成调整窗体大小时引发 ResizeEnd 事件,通常是通过拖动边框之一或位于窗体右下角的尺寸控制点,然后释放它。当用户移动表单时也会引发。

如果出于任何原因您需要最大化 window 引发 ResizeEnd 事件,您可以通过以下方式引发事件:

const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
    if (m.Msg == WM_SYSCOMMAND) 
    {
        if (m.WParam == (IntPtr)SC_MAXIMIZE) 
        {
            //the window has been maximized
            this.OnResizeEnd(EventArgs.Empty);
        }
    }
}

备注

  • 当窗体最大化时也会引发 Resize 事件。
  • 如果您想处理自定义布局,Layout 事件是一个合适的事件。