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

本文关键字:事件 ResizeEnd 小时 最大化 按钮 调整 窗体 | 更新日期: 2023-09-27 18:08:20

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

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

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

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

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

如果出于任何原因你需要最大化引起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事件是一个合适的事件。