0

好的,所以我在这里第一次尝试拖放功能。我已经处理了鼠标按下并从我的源代码管理中调用了 DoDragDrop。

我想要实现的是将帐户从一个 MDI 孩子复制/移动到另一个。在我的上下文中,回到源代码控制是没有任何意义的。

我正在查看拖动输入,您可以在其中提供有关当前效果的信息。

我想要如下所示的东西:

If(eventData.Source != accountList)
{
    eventData.Effect = DragDropEffects.Copy;
}

但是,我似乎找不到任何方法来确定数据的源控制。我唯一能想到的就是拥有一个自定义类并将其传递到数据中,并在其中嵌入源代码控制,还是我遗漏了一些明显的东西?

4

2 回答 2

1

这是在 WPF 中吗?如果是,那么您可以使用OriginalSource传递给您的方法的事件的属性,因为它应该映射到您在调用 DoDragDrop 方法时传递的源。

如果您使用的是 Windows 窗体,则在开始操作时无法传递自己的源,因此最好的办法是附加IDataObject您创建的自定义数据并根据该数据确定源。

在我看来,拖放用例是疯狂的,请确保您还涵盖从外部应用程序开始拖动的情况,因为您将收到相同的 DragEnter 和所有其他方法,就像您在应用程序中启动它一样。

于 2013-02-03T17:45:56.740 回答
1

在对 DoDragDrop 的调用中,将对象添加为额外格式:

 var dragSource = this;
 var data = "Hello";

 var dataObj = new DataObject(data);
 dataObj.SetData("DragSource", dragSource);
 DragDrop.DoDragDrop(dragSource, dataObj, DragDropEffects.Copy);

现在在 OnDrag 处理程序中很容易获得拖动源:

protected override void OnDrop(DragEventArgs e)
{
  var data = e.Data.GetData(DataFormats.Text);
  var dragSource = e.Data.GetData("DragSource");
  ...
}
于 2014-05-16T14:59:13.027 回答