通过最大化按钮调整表单大小时,是否不会触发ResizeEnd事件?

Pri*_*hiv 4 .net c# events resize winforms

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

Resize事件在我的方案中不起作用,因此我需要使用ResizeEnd事件。

为什么通过最大化按钮调整表单大小时未触发此事件?还是有人可以建议替代方案?

Rez*_*aei 6

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意

  • Resize当表单最大化时,也会引发该事件。
  • Layout如果要处理自定义布局,则此事件是合适的事件。

  • 此外,如果用户通过双击标题来最大化/恢复窗口,则会发送略有不同的消息:“0xF032”和“0xF122”。 (4认同)
  • 谢谢你。很有帮助。如果有人想知道,我还添加了以便事件在还原时也触发`const int SC_RESTORE = 0xF120`。 (2认同)