我有一个具有约束MaxSize的WinForm表单。如果我按下最大化按钮,此窗口将弹出到位置0,0(左上角),并使用正确的MaxSize。有没有办法防止表单移动?
我可以在移动表单(通过操作系统)后设置一个新位置,但是用户可以在屏幕上看到弹出的表单,这不是很整洁。 (我更改了FormName以在此处发布代码)。 SuspendLayout在这里没有帮助,我不一定要禁用最大化按钮。
void frmWinForm_SizeChanged(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Maximized)
{
var x = ... // some calculated or original x position
var y = ... // some calculated or original y position
WindowState = FormWindowState.Normal;
SetBounds(x, y, MaxSize.X, MaxSize.Y);
}
}
答案 0 :(得分:3)
覆盖WndProc功能。检查最大化事件。手动设置首选最大尺寸并从功能返回。这样你就可以覆盖预定义的最大化行为:
sizeof(arr)/sizeof(arr[0])
这将阻止最大化按钮变为标准化按钮。使用以下代码不会阻止按钮更改:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0112) // WM_SYSCOMMAND
{
if (m.WParam == new IntPtr(0xF030)) // Maximize event
{
Size = MaximumSize; //Set size manually and return
return;
}
}
base.WndProc(ref m);
}