滚动时拖放事件会中断 GUI 的平滑运动

Drag And Drop events are interrupting smooth motion of GUI when scrolling

我有一个 splitContainer 控件。
在其中一个 splitContainer 面板中有一个 FlowlayoutPanel 配置了 AutoScroll=True
FlowLayoutPanel 包含约 200 个控件(因此用户必须滚动才能与所有控件进行通信)。
每个控件都由 FlowLayoutPanel 父级组成,父级内部有 3 个子级 FlowLayoutPanels,每个子级内部有 2 个 Label 个子级。 所有标签调用 "Drag" 事件:

    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 和标签)编写了扩展方法,以便将 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);
    }
}

我的问题: 用户体验受到负面影响,因为控件闪烁,滚动时屏幕堆叠,感觉质量很差。 我发现如果我评论拖放事件,GUI 的表现会好得多。 如何在不损害用户体验的情况下为每个控件调用这些事件?

谢谢。

不要使用 MouseEnter 事件启动拖放操作。典型的方法是使用 MouseDown 事件。

我运行使用MouseEnter进行了快速测试,当鼠标在控件内时,它被反复点击。似乎启动拖动会导致鼠标离开控件。这些多个事件触发可能是您问题的很大一部分。