无边界MDI子窗体在第一次闪烁时会在Show上绘制窗体边框

问题描述

我对C#WinForms应用程序的行为有一个奇怪的问题。

我正在使用MDI容器表单作为我的主要表单。 它的“页面”很少(就像选项卡逻辑一样),其中某些工具栏样式的按钮正在更改这些页面。所有“页面”至少具有5-6个MDI子窗体,并且当用户激活一个页面时,该页面的所有子窗口都将在隐藏状态下可见(当停用该页面时(通常是单击另一个页面))

问题是,所有mdi-child窗口都根本没有边框(FormBorderStyle.None),但是当我每次将它们强制为.Show()时,操作系统都会绘制完整的边框和标题(例如{{ 1}}设置为Form.BorderStyle),然后隐藏边框和标题,这会导致可怕的闪烁(即使在我的高端GTX 1650 Super图形卡上也是如此)。

我已经在使用FormBorderStyle.Sizable控件(MDI父表单和所有MDI子表单以及listview对象都是双缓冲的)

DoubleBuffered

您可以自己在YouTube演示视频中清楚地看到它(约40秒):

https://www.youtube.com/watch?v=8XRK0VBDwK0&feature=youtu.be

起初,我认为这可能是因为我在列表视图中进行了大量的所有者绘制操作,但是在编写了一个非常简单的示例却没有任何所有者绘制操作之后,我观察到了相同的行为。

>

完整的示例是:

    public class DoubleBufferedForm : Form
    {
        public DoubleBufferedForm()
        {
            base.DoubleBuffered = true;
        }
    }

    public class DoubleBufferedPanel : Panel
    {
        public DoubleBufferedPanel()
        {
            base.DoubleBuffered = true;
        }
    }

    public class DoubleBufferedListView : ListView
    {
        public DoubleBufferedListView()
        {
            base.DoubleBuffered = true;
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...