【问题标题】:Prevent drag/drop from working between seperate instances of an app防止拖放在应用程序的不同实例之间工作
【发布时间】:2009-08-14 14:20:40
【问题描述】:

我有一个带有 2 个 DataGridView 的应用程序,并且已经实现了拖放操作以允许用户在它们之间移动数据。在我的应用程序的上下文中,在表单的两个实例之间拖动行并不是一个有意义的操作。我不确定如何在拖动输入中检测到它,以便我可以将 e.Effect 设置为 DragDropEffects.None。

如果我不这样做并将其设置为复制 DragDrop 事件失败并出现一个神秘的异常“此远程代理没有通道接收器,这意味着服务器没有正在侦听的注册服务器通道,或者此应用程序没有合适的客户端通道与服务器对话。”

虽然我可以捕获此异常以防止发生崩溃,并中止进程中的实际数据删除,但这样做是不好的做法,并且可能会让用户感到困惑,因为会显示允许删除的光标但没有会发生下降。

【问题讨论】:

    标签: c# winforms datagridview drag-and-drop


    【解决方案1】:

    Microsoft 表示,任何控件都可以接受来自正在进行的拖放操作的数据,并且您可以通过将 AllowDrop 属性设置为 true 来将控件指定为拖放区。我认为,如果您在那些您不希望成为拖放区的控件上将 AllowDrop 设置为 false,您应该会获得所需的行为。

    如果你想检测你程序的两个实例之间的拖拽,可以在拖拽对象中设置一个ID(即在控件的标签中放一个GUID),在拖拽过程中查看是否它与您当前运行的实例的 GUID 匹配。

    http://msdn.microsoft.com/en-us/library/ms973845.aspx

    【讨论】:

    • 你误解了我在问什么。允许我在表格上的 DGV1 和 DGV2 之间进行双向拖动;所以我需要将 AllowDrop 设置为 true。如果我的应用程序有 2 个实例正在运行,则不允许从 Instance1 拖动到 Istance2。我正在尝试找出如何执行此操作。基本上我需要一个 DragSourceIsFromThisProcess() 函数。
    • 下降前你是如何检查的?如果你等到下降发生,是不是太晚了?
    • 我正在通过动态加载的 MouseMove 事件调用 DoDragDrop(仅在按下左键时激活);所以我可以设置标志。 DragEnter 事件在拖动开始后触发,所以我认为它不会发生乱序。
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多