Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DragDrop方法中显示通知,而不维护发件人';杜仲_C#_.net_Winforms - Fatal编程技术网

C# 在DragDrop方法中显示通知,而不维护发件人';杜仲

C# 在DragDrop方法中显示通知,而不维护发件人';杜仲,c#,.net,winforms,C#,.net,Winforms,当在DragDrop事件处理程序中显示MessageBox(错误)时-拖动操作尚未完成,因此当光标位于桌面上时-它仍然具有拖动图标。我如何防止这种情况 要复制,只需将文件拖动到具有以下内容的表单中:(+AllowDrop=true) 您永远不应该阻止D+D事件,因为它会阻塞拖动源并使其无响应。不恢复光标肯定是一个副作用。您需要在事件完成后运行此类代码。通过使用Control.BeginInvoke()优雅地完成。像这样: protected override void OnDragDro

当在
DragDrop
事件处理程序中显示
MessageBox
(错误)时-拖动操作尚未完成,因此当光标位于桌面上时-它仍然具有拖动图标。我如何防止这种情况

要复制,只需将文件拖动到具有以下内容的表单中:(+
AllowDrop=true


您永远不应该阻止D+D事件,因为它会阻塞拖动源并使其无响应。不恢复光标肯定是一个副作用。您需要在事件完成后运行此类代码。通过使用Control.BeginInvoke()优雅地完成。像这样:

    protected override void OnDragDrop(DragEventArgs drgevent) {
        this.BeginInvoke(new Action(() => {
            MessageBox.Show(this, "Error");
        }));
        base.OnDragDrop(drgevent);
    }

请注意,总的来说,它不应该走这么远。DragEnter事件处理程序应否决删除尝试。如有必要,您可以使用状态条显示轻度诊断。

谢谢。是否有任何理由不在事件处理程序中执行此操作(而不是重写OnDragDrop)?如果需要,可以使用事件处理程序。我坚定地站在程序员的阵营中,他们认为一个类听自己的事件是没有意义的。事件用于其他类中的代码。再次感谢。​​​​​​​​​​​​​​​​​​​​​​​​​
    protected override void OnDragDrop(DragEventArgs drgevent) {
        this.BeginInvoke(new Action(() => {
            MessageBox.Show(this, "Error");
        }));
        base.OnDragDrop(drgevent);
    }