如何减少闪烁?
滚动值更改时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;
}
答案 0 :(得分:0)
在WinForms中有很多这样的策略,首先你可以考虑通过将Control.DoubleBuffered
属性设置为true来启用窗口和/或控件的双缓冲。
获取或设置一个值,该值指示此控件是否应使用辅助缓冲区重绘其曲面以减少或防止闪烁。
所以,这应该减少闪烁,但不一定消除它。这取决于。
答案 1 :(得分:0)
尝试使用无闪烁的自定义面板控件。
在应用程序中使用NonFlickerPanel对象而不是Panel对象。
public partial class NonFlickerPanel : Panel
{
public NonFlickerPanel() : base()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint,
ControlStyles.UserPaint
ControlStyles.OptimizedDoubleBuffer,
true);
}
}