C# 防止物品掉到自己身上
好的,我在这里第一次尝试拖放功能。我已经放下鼠标,从源代码管理中调用了DoDragDrop 我试图实现的是将帐户从一个MDI子级复制/移动到另一个MDI子级。在我的上下文中,再回到源代码管理是毫无意义的 我正在查看拖动输入,在这里可以提供有关当前效果的信息 我想要的东西应该是这样的:C# 防止物品掉到自己身上,c#,winforms,drag-and-drop,C#,Winforms,Drag And Drop,好的,我在这里第一次尝试拖放功能。我已经放下鼠标,从源代码管理中调用了DoDragDrop 我试图实现的是将帐户从一个MDI子级复制/移动到另一个MDI子级。在我的上下文中,再回到源代码管理是毫无意义的 我正在查看拖动输入,在这里可以提供有关当前效果的信息 我想要的东西应该是这样的: If(eventData.Source != accountList) { eventData.Effect = DragDropEffects.Copy; } 然而,我似乎找不到任何方法来确定数据的源代
If(eventData.Source != accountList)
{
eventData.Effect = DragDropEffects.Copy;
}
然而,我似乎找不到任何方法来确定数据的源代码控制。我能想到的唯一一件事就是拥有一个自定义类并在数据中传递它,其中嵌入了源代码控制,或者我缺少了一些明显的东西?这是WPF中的吗?如果是,则可以使用传递给方法的事件的
OriginalSource
属性,因为该属性应该映射到调用DoDragDrop方法时传递的源
如果您使用的是Windows窗体,则启动操作时无法传递自己的源代码,因此最好附加使用自定义数据创建的IDataObject
,并根据该数据确定源代码
Drap drop用例在我看来是疯狂的,请确保您也涵盖了从外部应用程序开始拖动的情况,因为您将收到与在应用程序中启动相同的DragEnter和所有其他方法。在对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");
...
}
这就是答案,这是一个非常好的答案。但是你把代码弄乱了一点。该行应为
DragDrop.DoDragDrop(dataObj,DragDropEffects.Copy)代码>