滚动值更改时,C#面板闪烁
如何减少闪烁 滚动值更改时,C#面板闪烁 这是一个基于windows窗体的项目 [翻译是一个用户控件,包含两个文本框和蓝色背景颜色。] 我的实施:滚动值更改时,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
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-不,它只包含两个文本框和两个标签