为了账号安全,请及时绑定邮箱和手机立即绑定

如何在窗体上双缓冲.NET控件?

如何在窗体上双缓冲.NET控件?

牧羊人nacy 2019-07-15 16:04:03
如何在窗体上双缓冲.NET控件?如何设置受保护的DoubleBuffered窗体上受闪烁影响的控件的属性?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

查帐这条线

重复这个答案的核心,您可以在窗口上打开WS_ex_Composed样式标志,以获得窗体及其所有控件的双缓冲。自XP以来,样式标志可用。这并不能使绘画更快,但整个窗口是绘制在一个屏幕外的缓冲区,并一刀切地闪现到屏幕上。使它在用户的眼睛看起来即时没有可见的绘画文物。它并不是完全没有麻烦,一些视觉样式渲染器可以在它上故障,特别是TabControl,当它有太多的标签。YMMV。

将此代码粘贴到窗体类中:

protected override CreateParams CreateParams {
    get {
        var cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;    // Turn on WS_EX_COMPOSITED
        return cp;
    } }

这种技术和Winform的双缓冲支持之间最大的区别是Winform的版本只在一个控件上工作。您仍然会看到每个单独的控件绘制本身。这看起来也像闪烁的效果,特别是如果未绘制的控制矩形与窗口的背景形成了严重的对比。


查看完整回答
反对 回复 2019-07-15
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control)
    .GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.Instance);aProp.SetValue(ListView1, true, null);

伊恩有关于在终端服务器上使用此功能的更多信息。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 827 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信