我有一个splitContainer
控件。
在一个splitContainer面板中,有一个配置了AutoScroll=True
的FlowlayoutPanel
。
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进行了快速测试,并且在鼠标处于控件中时会重复击中。看来启动阻力会导致鼠标离开控件。这些多个事件射击可能是您问题的很大一部分。