滚动事件在滚动时会中断GUI的平稳运动



我有一个splitContainer控件。
在一个splitContainer面板中,有一个配置了AutoScroll=TrueFlowlayoutPanel
FlowlayoutPanel包含约200个控件(因此用户必须滚动以与所有控件进行通信)。
每个控件都是由Flowlayoutpanel父母组成的,他的内心有3个Flowlayoutpanels的孩子,每个孩子都有2个Label孩子的孩子。所有标签调用"拖动"事件:

    private void Vcont_MouseEnter(object sender, EventArgs e)
    {
       System.Windows.Forms.Control c = sender as System.Windows.Forms.Control;
       c.DoDragDrop(c, System.Windows.Forms.DragDropEffects.Move);
    }
    private void Vcont_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
        e.Effect = System.Windows.Forms.DragDropEffects.All;
    }

Form设置为DoubleBuffered=True,我为每个控件(splitContainer,flowlayoutpanels and Labels)编写了扩展方法,以便将DoubleBuffered属性设置为true,例如:

public static class ExtensionMethods
{
   public static void DoubleBuffered_FlPanel(this FlowLayoutPanel fp, bool setting)
    {
        Type type = fp.GetType();
        PropertyInfo pi = type.GetProperty("DoubleBuffered",
            BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(fp, setting, null);
    }
}

我的问题: UX体验受到负面影响,因为控件闪烁,屏幕在滚动时会堆叠,并且质量差。我发现,如果我评论拖放事件,gui的表现会更好。如何为每个控件调用这些事件而不会损害用户体验?

谢谢。

不要使用MouseEnter事件启动Drag&降低。典型的方法是使用Mousedown事件。

我使用MouseEnter进行了快速测试,并且在鼠标处于控件中时会重复击中。看来启动阻力会导致鼠标离开控件。这些多个事件射击可能是您问题的很大一部分。

最新更新