【问题标题】:Form acts odd when MaximizedBounds is changed当 MaximizedBounds 更改时,表单行为奇怪
【发布时间】:2016-02-04 05:51:14
【问题描述】:

我正在使用最大化时具有指定位置和大小的 Windows 窗体。
我的问题是,当表单最大化时,表单会移动到桌面的左上角并返回到指定的位置……有时,左上角区域会留下空白背景。

这就是我可以重现问题的方法......

1) 创建一个名为“MaximizingTest”的新“Windows 窗体应用程序”项目。
2) 添加“this.MaximizedBounds = new Rectangle(100, 100, 200, 200);”在“InitializeComponent()”下。
3) 添加 SizeChanged 事件。
4) 添加“System.Threading.Thread.Sleep(10000);”
5) 按“F5”运行应用程序。
6) 点击表格最大化按钮,快速点击表格外某处失去焦点。
7) 用指定的位置(100,100)和大小(200,200)重绘表格。
8) 几秒钟后,表格移动到桌面的左上角。
9) 几秒钟后,表格再次返回到指定位置。

我想知道为什么在 UI 线程忙(睡眠)时表单会移动到左上角。

提前致谢!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MaximizingTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.MaximizedBounds = new Rectangle(100, 100, 200, 200);
        }

    private void Form1_SizeChanged(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(10000);
    }
}

}

【问题讨论】:

  • 表单上有多少个子控件?您发布的代码不会重现表单自行移动到角落然后回到 100,100 位置的问题。你还有其他我们看不到的事情发生。
  • 感谢 Lars Tech!此问题发生在“InitializeComponent();”下的“MaximizedBounds”行的普通 Windows 窗体项目上和“Form1_SizeChanged(...)”事件。我又试了一次,发现当单击 MaximizeButton 后表单失焦时,往往会发生问题……对于缺少信息,我感到非常抱歉。所以请尝试失去焦点。
  • 如果您在单击表单时如何失去焦点?有很多你没有告诉我们。尝试创建一个新项目并复制问题,然后发布该代码。
  • 嗨,Lars Tech!我刚刚编辑了这个问题,这个问题在我的环境中是如何发生的。我也在另一台机器上试过,也遇到了同样的问题。谢谢!

标签: c# winforms


【解决方案1】:

您已将 UI 线程设置为休眠 10 秒,因此每次调整表单大小时它都会在重绘之前暂停。为什么要将 UI 线程设置为睡眠?在我看来,这就是你的问题的原因。

【讨论】:

  • 感谢 Vivek Verma!我的实际代码不会休眠,但有一些工作要做(安排动态控件),耗时不到 1 秒。我知道当 UI 线程忙时重绘会暂停,但我不明白为什么表单会移动到桌面的左上角。这只发生在 MaximizedBounds 更改时...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
相关资源
最近更新 更多