<在发布之前我已经查看了 SO 显示的“相关问题”>
场景:
从 WinForm 中的控件开始拖放。
注意:所有拖放代码都经过验证和仔细测试。我现在可以使用代码 在释放鼠标时创建文件/将文件写入桌面。
拖动到窗体之外,鼠标移到桌面或桌面上的某个“项目”上。
[编辑以回应 Groo 的评论]
在这种情况下,拖放可能会进入桌面(它将成为一个文件:这种情况已经处理);或者,拖放可能会进入另一个应用程序的运行实例中的相同类型的控件(作为从中启动拖动的控件)(这种情况已处理)。我要问的情况是在桌面文件夹上发生下降的地方:Groo 的评论让我想测试尝试“即时”修改 DataObject 类型......在拖动期间......我从未尝试过之前:我不知道这是否可能。
[结束编辑]
我可以使用此代码示例 [1*] 中的 api 调用来获取在桌面上移动的鼠标的 IntPtr ID:对于任何桌面项目,如文件夹、快捷方式、回收站,都会返回相同的 IntPtr斌等
我想要的是:能够检测鼠标何时在桌面上的文件夹上释放:当然我想做的是获取鼠标经过的文件夹的路径:这样我就可以在该文件夹中创建文件。
谢谢,比尔
[1*]
“Jörg Bausch 的 FindWindow”
http://www.codeproject.com/KB/dialog/FindWindow.aspx?msg=3262771
最佳答案
如果您的文件在您开始拖动之前就存在(或者您之前能够创建它),您可以简单地在DataObject
中指定源文件路径。实例传递给 DoDragDrop
方法。
像这样(你应该已经有合适的处理程序):
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
this.MouseDown += Form1_MouseDown;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
string[] files = new string[] { @"C:\SomeTestFile.txt" };
this.DoDragDrop(new DataObject(DataFormats.FileDrop, files),
DragDropEffects.Copy);
}
}
如果您有兴趣在拖动时添加一些奇特的半透明效果,请尝试 this link .如果您的文件不存在并且您确实需要在将其放入资源管理器后 创建它,请检查 this link .
您还可以覆盖 DataObject
处理 GetData
删除对象时调用的方法:
public class MyDataObject : DataObject
{
public MyDataObject(string format, object data)
: base(format, data) { }
public override object GetData(string format)
{
MessageBox.Show("Format: "+format);
return base.GetData(format);
}
}
关于C#在拖动操作期间检测桌面文件夹鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699504/