【发布时间】:2016-09-23 05:16:09
【问题描述】:
在我的应用程序中,ResizeEnd 事件在通过拖动角来调整表单大小时触发,但在我单击最大化按钮时不会触发。
Resize 事件在我的场景中不起作用,因此我需要使用 ResizeEnd 事件。
为什么在通过最大化按钮调整表单大小时没有触发此事件?或者任何人都可以提出替代方案?
【问题讨论】:
标签: c# .net winforms events resize
在我的应用程序中,ResizeEnd 事件在通过拖动角来调整表单大小时触发,但在我单击最大化按钮时不会触发。
Resize 事件在我的场景中不起作用,因此我需要使用 ResizeEnd 事件。
为什么在通过最大化按钮调整表单大小时没有触发此事件?或者任何人都可以提出替代方案?
【问题讨论】:
标签: c# .net winforms events resize
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);
}
}
}
注意
【讨论】:
Form 中。但是,如果它不是您的表单,并且您无权访问其非公共成员来覆盖 WndProc 并调用 OnResizeEnd,您也可以对另一个您无权访问的 Form 应用类似的解决方案这是非公共方法。
const int SC_RESTORE = 0xF120。
0xF032 和0xF122。