微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无边界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 举报,一经查实,本站将立刻删除。