1

如何减少闪烁?

滚动值更改时C#面板闪烁

这是一个基于 Windows 窗体的项目

[翻译是一个用户控件,包含两个文本框和蓝色背景色。]

我的实现:

    ScrollBar sb = new VScrollBar();
    translate[] t = new translate[5];

    private void btnSearch_Click(object sender, EventArgs e)
    {
        //
        sb.Dock = DockStyle.Right;
        sb.Scroll += sb_Scroll;
        panel1.HorizontalScroll.Value = 0;
        sb.Top = panel1.Top;
        sb.Height = panel1.Height;
        this.Controls.Add(sb);
        //


        Point p = new Point(10, 0);
        for (int i = 0; i < 5; i++)
        {
            t[i] = new translate();
            t[i].Left = p.X;
            t[i].Top = p.Y;
            panel1.Controls.Add(t[i]);

            //p.X += 100;
            p.Y += 110;
        }
    }

    void sb_Scroll(object sender, ScrollEventArgs e)
    {
        //panel1.Invalidate();
        panel1.VerticalScroll.Value = sb.Value;
    }
4

2 回答 2

1

Control.DoubleBuffered在 WinForms 中对此有许多策略,首先您可以考虑通过将属性设置为 true 来启用窗口和/或控件的双缓冲。

获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其表面以减少或防止闪烁。

所以,这应该减少闪烁,但不一定消除它。那要看。

于 2013-06-10T19:04:32.117 回答
0

尝试使用无闪烁自定义面板控件。

  • 将新类“NonFlickerPanel”添加到您的 C# 应用程序。
  • 将自动生成的类代码替换为如下所示的 C# 代码。
  • 在您的应用程序中使用 NonFlickerPanel 对象而不是 Panel 对象。

    public partial class NonFlickerPanel : Panel
    {
       public NonFlickerPanel() : base()
       {
          this.SetStyle(ControlStyles.AllPaintingInWmPaint,
                              ControlStyles.UserPaint 
                              ControlStyles.OptimizedDoubleBuffer, 
                              true);
       }
    } 
    
于 2015-07-30T06:32:14.253 回答