无边框表单在mdi容器内显示时会显示边框

时间:2011-01-12 11:45:43

标签: .net visual-studio winforms windows-xp formborderstyle

更新(2011-01-17):

我正在MdiContainer中创建一个带有FormBorderStyle=None的表单。 当我显示第一个表单时,即使它已经被创建,在几分之一秒内它会显示为正常形式的蓝色边框,然后它会被还原。

使用下面的示例,在button1上一次又一次地单击,它会不时显示此行为,虽然这是非常短暂的时间,所以我想在很快的机器中很难看到;但是,在我的第三方.net控件的生产代码中,它显示了更长的时间。

要尝试此操作,只需创建一个新项目,以及一个名为Form2的窗体,向Form1添加一个按钮,添加事件Form1_Load和button1_Click,然后粘贴代码。然后,单击button1一段时间。

public partial class Form1 : Form
{
    Form2 form;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Visible = !form.Visible;
        form.MdiParent = this;

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.IsMdiContainer = true;
        form = new Form2();
        form.FormBorderStyle = FormBorderStyle.None;
    }
}

这是与语言无关的,所以,请不要在没有充分理由的情况下更改我的标签。

3 个答案:

答案 0 :(得分:1)

如果您的主UI线程速度变慢,Windows将使用默认值绘制表单(至少在Vista / Windows 7的DVM世界中),直到您的线程再次响应。检查以确保您的UI线程在第一次显示表单时没有等待某些其他线程或进行一些繁重的处理。

答案 1 :(得分:1)

我在我的应用程序中遇到了同样的问题,并添加了以下行作为Form-Load Function中的第一行来解决问题

this.FormBorderStyle = FormBorderStyle.None;

答案 2 :(得分:0)

这可能取决于您在Load,构造函数或Shown中更改FormBorderStyle。最好在构造函数中执行(InitializeComponents方法)。