【问题标题】:Why is this form much wider at runtime than at design time? [duplicate]为什么这种形式在运行时比设计时宽得多? [复制]
【发布时间】:2014-09-04 18:49:55
【问题描述】:

我在 VS2012 中创建了一个非常小的表单,在设计器中看起来像这样:

但是当我运行应用程序时,表单会变大,看起来像这样:

任何想法为什么?我尝试了不同的表单边框样式,结果还是一样。

如果您也尝试看到您获得相同的结果,我将不胜感激。

我感觉 VS 中的表单有最小尺寸限制。在这种情况下,问题是为什么 IDE 允许用户在该限制下重新调整表单大小。

在链接的所谓重复答案(也不起作用)中,回答的人说“我在 Windows 8.1 上测试过,我不能保证它适用于所有 Windows 版本”猜猜看,我有 Windows 7并回答不起作用! -

【问题讨论】:

  • 这被标记为审核以决定是否应该重新打开它,请解释为什么它不是重复的?它看起来确实相关。
  • 这是 SO 的大问题。作为 OP,我尝试了 supped 的答案,并且仍然变得更大。所以这个答案对我不起作用。仅仅因为有人在这里有很多观点,他的答案并不都是有效的,你应该盲目地关闭这个问题。
  • 在链接的所谓重复答案(也不起作用)中,回答的人说“我在 Windows 8.1 上测试过,我不能保证它适用于所有 Windows 版本”猜猜看,我有 Windows 7 并回答 DOES NOT WORK!
  • 您盲目地关闭一个问题或将其标记为重复只会进一步降低您心爱的网站 SO。如果那不是你喜欢的,那就去吧。我该反对谁?我什至鼓励你做更多这样的事情;)
  • 我建议让你的其他帮派伙伴多投反对票。我真的在笑。你们伤心。具有讽刺意味的是,重复的问题被投票赞成:) 哈哈。

标签: c# vb.net winforms


【解决方案1】:

窗口的最小尺寸基于可用的最小标题栏。为图标和最小/最大/关闭按钮留出足够空间的一种。即使对于没有窗户的窗户,也有一点错误。但是,解决方法很简单,您可以在 Load 事件中更改大小。由于视频 DPI 设置,请注意重新缩放。大致:

    protected override void OnLoad(EventArgs e) {
        this.ClientSize = new Size(
            numericUpDown1.Right + numericUpDown1.Left,
            numericUpDown1.Bottom + numericUpDown1.Top);
        base.OnLoad(e);
    }

【讨论】:

  • 如果我有 Base.Onload(e) 我在this.ClientSize = new Size( numericUpDown1.Right + numericUpDown1.Left, numericUpDown1.Bottom + numericUpDown1.Top); {Cannot evaluate expression because the current thread is in a stack overflow state.}得到一个例外@
  • 您的解决方案试过了吗?
  • 如果我注释掉 Base.Onload 表单仍然过大。
  • 这不是我的代码的样子,是吗?它本来是复制/粘贴代码。如果您使用该事件,则not 调用 base.OnLoad()。因为它再次触发事件,所以它会爆炸。
  • @Bjørn - 上帝知道我也想关掉它,但那会完全把他从悬崖上送下去。
【解决方案2】:

也可以将设计器中的MinimumSize 设置为1;1(而不是默认的0;0)。

编辑: 我已经在 Windows 7 上的 VS2010 和 VS2013 以及不同的目标框架(在 VS13、3.5、4.0、4.5、4.5.1 中)对此进行了测试。 以下示例代码适用于所有情况。如果有人可以确认哪些系统不起作用,我会欢迎任何 cmets。

    private void button1_Click(object sender, EventArgs e)
    {
        using (Form frm = new Form())
        {
            frm.FormBorderStyle = FormBorderStyle.None;

            // -> size is 80,80 with this line,
            // and wider if this line is commented out
            frm.MinimumSize = new Size(1, 1);

            frm.BackColor = Color.Orange;
            frm.Size = new Size(80, 80);
            frm.Click += (s, e2) =>  frm.Close();
            frm.ShowDialog(this);
        }
    }   

【讨论】:

  • 您真的费心尝试您的解决方案吗?不,它不起作用。
  • 它并没有真正“打扰”我,但是是的,我确实尝试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2014-03-29
  • 2014-08-31
  • 2020-11-24
  • 1970-01-01
相关资源
最近更新 更多