在MessageBox
事件处理程序中显示DragDrop
(错误)时 - 拖动操作尚未完成,因此当光标在桌面上时 - 它仍然具有拖动图标。我该如何预防?
要重现,只需将文件拖到包含以下内容的表单中:(+ AllowDrop = true
)
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.None;//Doesn't help.
MessageBox.Show(this, "Error");
}
答案 0 :(得分:1)
你永远不应该阻止D + D事件,它会使阻力源变得粗糙并使其无法响应。没有恢复光标肯定是一个副作用。 事件完成后,您需要运行此类代码。使用Control.BeginInvoke()优雅地完成。像这样:
protected override void OnDragDrop(DragEventArgs drgevent) {
this.BeginInvoke(new Action(() => {
MessageBox.Show(this, "Error");
}));
base.OnDragDrop(drgevent);
}
请注意,一般来说,它应该永远不会这么远。拖放尝试应该由DragEnter事件处理程序排除。例如,如果需要,您可以使用StatusStrip显示温和诊断。