.net 无边框窗体在mdi容器中显示时会显示一段时间的边框

.net 无边框窗体在mdi容器中显示时会显示一段时间的边框,.net,visual-studio,winforms,windows-xp,formborderstyle,.net,Visual Studio,Winforms,Windows Xp,Formborderstyle,更新(2011-01-17): 我正在MDI容器中创建一个FormBorderStyle=None的表单。 当我显示第一个表单时,即使它已经被创建,在一小部分时间内,它以正常表单的蓝色边框出现,然后它被还原 在下面的示例中,单击按钮1一次又一次,它会不时地显示这种行为,尽管这是一个非常短暂的时间间隔,所以我想在一个非常快速的机器中很难看到它;然而,在我使用第三方.net控件的生产代码中,它显示的时间要长得多 要尝试此操作,只需创建一个新项目和一个名为Form2的windows窗体,向Form1添

更新(2011-01-17):

我正在MDI容器中创建一个
FormBorderStyle=None
的表单。 当我显示第一个表单时,即使它已经被创建,在一小部分时间内,它以正常表单的蓝色边框出现,然后它被还原

在下面的示例中,单击按钮1一次又一次,它会不时地显示这种行为,尽管这是一个非常短暂的时间间隔,所以我想在一个非常快速的机器中很难看到它;然而,在我使用第三方.net控件的生产代码中,它显示的时间要长得多

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

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;
    }
}

这与语言无关,因此,请不要在没有充分理由的情况下更改我的标记。

这可能取决于您是在加载时、在构造函数中还是在屏幕上更改FormBorderStyle。最好在构造函数(InitializeComponents方法)中执行此操作。

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

我的应用程序中也有同样的问题,我在表单加载函数中添加了以下行作为第一行以解决此问题


this.FormBorderStyle=FormBorderStyle.None

谢谢你的回答。我正在设计器中更改它,所以是的,它在InitializeComponents中确实在更改。您对该表单使用双缓冲吗?不,但我已经更改了它,没有任何区别。我无法使用您描述的完全相同的表单继承链来复制它。在VS2008中编译(我没有VS2005,但这不应该是相关的),针对运行在WindowsXP下的.NETFW的3.0版。还有别的问题。在继承链中的每个表单的构造函数方法中发布代码。只要使用构造函数,就不会发生这种情况。您需要提供一个展示这种行为的小型repo项目。我已经在vs2010中对其进行了测试,包括FW版本2.0、3.0、3.5和4.0,并且启用了优化,以防万一。我现在就发布最简单形式的代码。[无关:您正在使用关闭的“Option Strict”进行编码。将其打开(在项目属性中),并修复编译器错误。在VB.NET中为所有项目保持打开状态。]此外,我再次尝试,创建了一个空白项目,其中包含两个包含您上面发布的代码的类,添加代码中引用的控件以使其可编译,在设计器中将
FormLogin
上的
FormBorderStyle
设置为“无”,并在空白的Windows XP虚拟机上运行。我仍然没有看到表单边界的闪光。我怀疑问题出在你电脑的显卡上。你能试试另一台电脑吗?谢谢你的建议,科迪;从VB6和C++,我认为“选项显式”就足够了。我会尝试另一台电脑,但我不认为图形卡是问题所在。。。这是GeForce 8800 GTX。无论如何,我会尝试更新驱动程序。