C#告诉表格是否最大化

时间:2009-06-02 16:35:47

标签: c# winforms resize wndproc maximize

好的,这是我的问题。我有一个表单,当它没有最大化时,它的最大大小必须是表单内组件的总高度。为实现这一目标,我使用了这个:

    private void resize_form(object sender, EventArgs e)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }

触发表单的Resize事件。因为组件大小总是在变化,所以在resize事件上执行此操作是有意义的。如果我想最大化表单,表单只是转到this.MaximumSize中定义的最高设置。所以我想知道是否有一种方法可以告诉表单何时最大化并在表单最大化之前将其最大大小设置为屏幕边界。

如果有更好的方法可以在没有resize事件的情况下更改maximumsize值,那也很棒:)

5 个答案:

答案 0 :(得分:7)

您仍然需要使用resize事件,但请检查WindowState

if (this.WindowState == FormWindowState.Maximized)
{
    // Do your stuff
}

正如yshuditelu指出的那样,您也可以设置表单的最小大小属性 - 当与明智地使用锚值相结合时,这意味着它永远不会缩小得太远,当它确实增长时,组件将移动和/或根据需要成长。

答案 1 :(得分:3)

我找到了完全适合我的答案。一个小的WndProc覆盖:D(我现在喜欢WndProc)

protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MAXIMIZE = 0xF030; 

    switch (message.Msg)
    {
        case WM_SYSCOMMAND:
            int command = message.WParam.ToInt32() & 0xfff0;
            if (command == SC_MAXIMIZE) 
            {
                this.maximize = true;
                this.MaximumSize = new System.Drawing.Size(0, 0);
            }
            break;
    }

    base.WndProc(ref message);
}

private void resize_form(object sender, EventArgs e)
{
    if (!maximize)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }
}

基本上,当它接收到SC_MAXIMIZE消息时,它将this.maximize设置为true。如果this.maximize设置为false,则resize事件将仅设置新的MaximumSize。 Nifty xD

答案 2 :(得分:2)

您确定不想设置MinimumSize属性吗?如果将MinimumSize设置为所有标签的大小,则表单将永远不会小于该值。但它仍然可以增长到用户想要的任何大小,只要它大于最小值。

答案 3 :(得分:0)

查看System.Windows.Forms.Screen课程。从相关点获取屏幕(处理多星型情况),然后获得其分辨率。

这应该与关于检查FormWindowState.Maximized的其他注释一起使用。

答案 4 :(得分:0)

如果用户点击上方栏,他们可以调整窗口大小,所以我使用它:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}