确定继承人我的问题。我有一个表格,当没有被最大化了,它的最大尺寸必须在表单内的部件的总高度。为了实现这一点,我使用这样的:

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

这在表格的Resize事件触发。由于元件尺寸总是在变化这是有道理这样做在一个调整大小事件。如何过,如果我想最大限度的形式,形式只是去到this.MaximumSize定义的最高设置。所以我想知道有没有办法告诉当窗体将被最大化,其MAXIMUMSIZE设置在屏幕boundarys形式最大限度地提高了。

如果有更好的方法来更改,恕不resize事件MAXIMUMSIZE值,这也将是巨大的:)

有帮助吗?

解决方案 2

我发现适合我完美的答案。阿律的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);
    }
}

基本上,它设置this.maximize为true当它接收TEH SC_MAXIMIZE消息。如果this.maximize设置为false Resize事件将只设置一个新的MAXIMUMSIZE。漂亮的xD

其他提示

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

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

由于yshuditelu指出,你可以设置你的窗体的最小尺寸属性太 - 这应该,当明智地使用锚值的耦合意味着它永远不会收缩得太厉害,当它成长的组件将移动和/或生长为必需的。

您务必不要想设置的 的minimumSize财产?如果您设置到的minimumSize所有标签的大小,那么形式将永远不会小于。但它仍然可以增长到任何大小的用户想要的,只要它是大于最小值。

查看 System.Windows.Forms的。屏幕类。从相关点得到屏幕(来处理多纹的情况下),然后获取其分辨率。

此应结合工作与有关检查FormWindowState.Maximized其它评论。

如果用户点击在上部杆,它们可以调整窗口的大小,所以使用这样的:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top