防止MaxSized C#WinForm在最大化时移动

时间:2016-05-13 09:11:15

标签: c# winforms

我有一个具有约束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);
    }
}

1 个答案:

答案 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);
}