Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
平滑滚动FlowLayoutPanel C#_C#_Winforms_Flowlayoutpanel - Fatal编程技术网

平滑滚动FlowLayoutPanel C#

平滑滚动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

谁能帮我解决这个问题。 我有FlowLayoutPanel,其中有多个用户控件。 已启用自动滚动。 我的问题是用户控件在滚动时闪烁/闪烁。我理解这是因为OnPaint事件。我试过下面的代码。源自FlowLayoutControl并试图覆盖WndProc,但未成功

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
?这是我的错误,我在用户控件绘制事件中使用了循环,导致控件自行缓慢绘制。闪烁问题的解决方案是: