能否设置窗体的最大宽度,但不限制最大高度?

15

如果您将Form.MaximumSize的宽度和高度都设置为零,出于某些原因,它会使您拥有不受限制的窗口大小,但是如果您想设置限制,您必须同时对宽度和高度进行设置。我希望有一个固定的宽度,但高度没有限制。

    // No Limits
    this.MaximumSize = new Size(0,0);

    // Form Height will be stuck at 0
    int ArbitraryWidth = 200;
    this.MaximumSize = new Size(ArbitraryWidth, 0);

你是否考虑拦截调整大小事件并手动强制表单的大小不超过你的任意宽度? - ose
@ose - 是的,但它看起来有点丑。 - Paul Matthews
不幸的架构决策 => 稍微丑陋的代码 :( - ose
3个回答

27

使用INT_MAX,因为这是可以由Size表示的理论上的限制:

//Max width 200, unlimited height
this.MaximumSize = new Size(200, int.MaxValue);

4

我知道这个问题已经有几年了,但我遇到了同样的问题,我的解决方法是将其中一个参数设置为屏幕的分辨率,假设表单的大小不能超过屏幕的大小。

this.MaximumSize = new Size(200, Screen.PrimaryScreen.Bounds.Height);

希望这能帮助到某些人。

虽然实际上它可能与INT_MAX没有区别,但对我来说是有效的。谢谢! - Paul Matthews
1
当你的分辨率改变时,这会导致问题。例如,如果你将笔记本电脑连接到投影仪进行演示。如果你的第二个、第三个等显示器比主显示器更高,并且你将窗体移动到该显示器上,或者如果你有堆叠的监视器并想将其跨越多个屏幕拉伸,也会失败。 - Dan Bechard
此外,即使在单个显示器的情况下,通常使用Screen.PrimaryScreen.WorkingArea.Height比使用Bounds更有意义,原因在这里描述:http://stackoverflow.com/questions/5797699/whats-the-difference-between-the-sum-of-a-screens-workingarea-and-its-bounds - Dan Bechard

1
这是IT相关的内容,请问需要翻译成中文吗?
能否为一个表单设置最大宽度,但保持最大高度不受限制?
实际上不太可能。您可以模拟以下操作:
    private void Form1_Resize(object sender, EventArgs e)
    {
        SetMaximumWidth();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        SetMaximumWidth();
    }

    private void SetMaximumWidth()
    {
        if (Width > 200)
            Width = 200;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接