当滚动值改变时,c#面板闪烁

本文关键字:闪烁 滚动 改变 | 更新日期: 2023-09-27 18:17:42

如何减少闪烁?

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

当滚动值改变时,c#面板闪烁

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

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

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

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

  • 在你的c#应用程序中添加新的类"NonFlickerPanel"
  • 用c#代码替换自动生成的类代码。
  • 在你的应用程序中使用NonFlickerPanel对象代替Panel对象

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