我有一个带有2个DataGridView的应用程序,并实现了拖放功能,允许用户在它们之间移动数据。在我的应用程序的上下文中,在表单的两个实例之间拖动行不是一个有意义的操作。我不确定如何在拖动输入中检测它,以便我可以将e.Effect设置为DragDropEffects.None。
如果我不这样做并将其设置为复制DragDrop事件失败并带有一个神秘的异常“此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的注册服务器通道,或者此应用程序没有合适的客户端频道与服务器通信。“
虽然我可以捕获此异常以防止发生崩溃,并且在此过程中中止实际的数据丢失,这样做是不好的做法,并且可能会让用户感到困惑,因为会显示drop allow cursor但是没有会发生下降。
答案 0 :(得分:2)
Microsoft表示,任何控件都可以接受正在进行的拖放操作的数据,并且可以通过将AllowDrop属性设置为true来将控件指定为放置区域。我认为,如果你在那些你不希望成为放置区的控件上将AllowDrop设置为false,那么你应该得到所需的行为。
如果要检测程序的两个实例之间的拖放,可以在拖动对象中设置ID(即将GUID放在控件的标记中),并在拖动过程中检查它以查看是否它匹配当前正在运行的实例的GUID。