滚动时拖放事件会中断 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进行了快速测试,当鼠标在控件内时,它被反复点击。似乎启动拖动会导致鼠标离开控件。这些多个事件触发可能是您问题的很大一部分。
我有一个 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进行了快速测试,当鼠标在控件内时,它被反复点击。似乎启动拖动会导致鼠标离开控件。这些多个事件触发可能是您问题的很大一部分。