【问题标题】:C# Tell If Form Is MaximisingC#判断表单是否最大化
【发布时间】:2009-06-02 16:35:47
【问题描述】:

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

    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 中定义的最高设置。所以我想知道有没有办法告诉表单何时最大化,并在表单最大化之前将其最大尺寸设置为屏幕边界。

如果有更好的方法可以在没有调整大小事件的情况下更改最大尺寸值,那也很棒:)

【问题讨论】:

    标签: c# winforms resize wndproc maximize


    【解决方案1】:

    你仍然需要使用resize事件,但是检查WindowState:

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

    正如 yshuditelu 指出的那样,您也可以设置表单的最小尺寸属性 - 这应该与明智地使用锚值相结合,意味着它永远不会缩小太多,并且当它确实增长时,组件会移动和/或按需增长。

    【讨论】:

    • 已经试过了。问题是,如果我尝试在表单最大化时编辑表单的宽度和高度,则什么也没有发生。即使我编辑 MaximumSize 属性
    • 我认为通过设置MaximumSize 属性,您已经有效地禁用了Maximize 功能。如果 WindowSate 已最大化,请尝试将 MaximumSize 设置为 (0,0)。
    • 我刚刚尝试过,当我点击最大化时,我的应用移动到屏幕的左上角并保持在最大尺寸。
    • 您也没有将 WindowState 设置为 Maximized。
    【解决方案2】:

    我找到了非常适合我的答案。一个 lil 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。漂亮的xD

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我已经设置了最小尺寸。作为一个设计完美主义者(不是说我擅长设计:P)我不能让表单比它显示的所有控件都大。
    【解决方案4】:

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

    这应该与其他关于检查 FormWindowState.Maximized 的评论结合使用。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多