平滑滚动FlowLayoutPanel C#
谁能帮我解决这个问题。 我有FlowLayoutPanel,其中有多个用户控件。 已启用自动滚动。 我的问题是用户控件在滚动时闪烁/闪烁。我理解这是因为OnPaint事件。我试过下面的代码。源自FlowLayoutControl并试图覆盖WndProc,但未成功平滑滚动FlowLayoutPanel C#,c#,winforms,flowlayoutpanel,C#,Winforms,Flowlayoutpanel,谁能帮我解决这个问题。 我有FlowLayoutPanel,其中有多个用户控件。 已启用自动滚动。 我的问题是用户控件在滚动时闪烁/闪烁。我理解这是因为OnPaint事件。我试过下面的代码。源自FlowLayoutControl并试图覆盖WndProc,但未成功 class ScrollFlowLayoutPanel : FlowLayoutPanel { private const int WM_HSCROLL = 0x114; private const int WM_VSC
class ScrollFlowLayoutPanel : FlowLayoutPanel
{
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc(ref Message m)
{
if ((m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL) && (((int)m.WParam & 0xFFFF) == 5))
{
// Change SB_THUMBTRACK SB_THUMBPOSITION
m.WParam = (IntPtr)(((int)m.WParam & ~0xFFFF) | 4);
}
base.WndProc (ref m);
}
}
多亏了对滚动进行了大量优化,一个控件只需获得另一个位置属性值,并且不会生成绘制事件,控件的像素将被闪烁显示。除非控件的一部分滚动到视图中,否则您将只为可见的条子绘制一幅图。一毫秒,给或拿。如果这仍然会导致可见的闪烁,那么您正在做一些非常错误的事情,无法从问题中猜出这可能是什么。您可以通过在主窗体中打开合成来翻转忽略位。不使用您发布的方法,滚动是smoth,但控制闪烁。使用已发布的代码控件时,控件不会闪烁,但滚动会变得缓慢且有点跳跃/干扰。您是否尝试过将表单上的
DoubleBuffered
设置为true
?这是我的错误,我在用户控件绘制事件中使用了循环,导致控件自行缓慢绘制。闪烁问题的解决方案是: