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

滚动值更改时,C#面板闪烁,c#,scrollbar,C#,Scrollbar,如何减少闪烁 滚动值更改时,C#面板闪烁 这是一个基于windows窗体的项目 [翻译是一个用户控件,包含两个文本框和蓝色背景颜色。] 我的实施: ScrollBar sb = new VScrollBar(); translate[] t = new translate[5]; private void btnSearch_Click(object sender, EventArgs e) { // sb.Dock = Dock

如何减少闪烁

滚动值更改时,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;
    }
ScrollBar sb=new-VScrollBar();
translate[]t=新的translate[5];
私有无效btnSearch_单击(对象发送者,事件参数e)
{
//
sb.Dock=DockStyle.Right;
sb.滚动+=sb_滚动;
panel1.HorizontalScroll.Value=0;
sb.Top=面板1.Top;
sb.高度=面板1.高度;
本.控制.添加(sb);
//
点p=新点(10,0);
对于(int i=0;i<5;i++)
{
t[i]=新的translate();
t[i].左=p.X;
t[i].Top=p.Y;
面板1.控制。添加(t[i]);
//p、 X+=100;
p、 Y+=110;
}
}
void sb_Scroll(对象发送器,ScrollEventArgs e)
{
//1.使无效();
panel1.VerticalScroll.Value=sb.Value;
}

代码>

在WiFrm中有很多策略,首先您可以考虑通过设置属性为true来启用窗口和/或控件的双缓冲。 获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重新绘制其表面,以减少或防止闪烁


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

在WiFrm中有很多策略,首先您可以考虑通过设置属性为true来启用窗口和/或控件的双缓冲。 获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重新绘制其表面,以减少或防止闪烁


因此,这应该减少闪烁,但不一定消除它。视情况而定。

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

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

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

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

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

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

如果在WinForms上,请尝试将窗体的
双缓冲
设置为
true
。yorye nathan-尝试过但不起作用@warrior使用
@
在评论中向人们致意。这样,他们就可以得到通知,并可以在收件箱中看到它。翻译是什么做的?它包含繁重的图形吗?@YoryeNathan-不,它只包含两个文本框和两个标签如果在WinForms上,请尝试将窗体的
双缓冲
设置为
true
。YoryeNathan-尝试过,但不起作用@warrior使用
@
在评论中向人们致意。这样,他们就可以得到通知,并可以在收件箱中看到它。翻译是什么做的?它包括厚重的图形吗?@YoryeNathan-不,它只包含两个文本框和两个标签