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

时间:2013-06-10 19:02:00

标签: c# scrollbar

如何减少闪烁?

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

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

[Translate是一个用户控件包含两个文本框和蓝色backgroudcolor。]

我的实施:

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

2 个答案:

答案 0 :(得分:0)

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

  

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

所以,这应该减少闪烁,但不一定消除它。这取决于。

答案 1 :(得分:0)

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

  • 添加新课程&#34; NonFlickerPanel&#34;到您的C#应用​​程序。
  • 使用下面显示的C#代码替换自动生成的类代码。
  • 在应用程序中使用NonFlickerPanel对象而不是Panel对象。

    public partial class NonFlickerPanel : Panel
    {
       public NonFlickerPanel() : base()
       {
          this.SetStyle(ControlStyles.AllPaintingInWmPaint,
                              ControlStyles.UserPaint 
                              ControlStyles.OptimizedDoubleBuffer, 
                              true);
       }
    }