2009-11-09 78 views
2

<我已審查通過SO所示的「相關問題」發佈這一>C#在拖動操作期間檢測桌面文件夾鼠標懸停?

方案之前:

  1. 將它從一個WinForm內的控制開始下降。

    注意:所有拖放代碼都經過驗證,經過仔細測試。當鼠標被釋放時,我現在可以使用代碼 創建/寫入文件到桌面。

  2. 拖動到窗體之外,鼠標在桌面上或桌面上的某個「項目」上移動。

[迴應編輯通過Groo評論]在這種情況下,下降可能去到桌面上(在那裏將成爲一個文件:這種情況下,已處理);或者,在另一個應用程序的運行實例中(該情況被照顧),該放置可能進入相同類型的控制(作爲從其開始拖動的控件)。我詢問的情況是在桌面文件夾中出現丟棄的位置:Groo的註釋使得想要測試試圖修改DataObject類型「在運行中」...在拖動過程中...我從未試過之前:我不知道是否有可能。

[編輯完]

我可以使用API​​調用此代碼示例[1 *]中得到一個IntPtr ID爲鼠標在桌面往上走:同樣的IntPtr返回任何桌面項,像一個文件夾,一個快捷方式,回收站等。

我想要的是:能夠檢測到鼠標在桌面上的文件夾上釋放時:當然我想要做的是獲得鼠標移動到文件夾的路徑:所以我可以在該文件夾內創建文件。

感謝,比爾

[1 *]

「FindWindow函數通過約爾格博士倫」

http://www.codeproject.com/KB/dialog/FindWindow.aspx?msg=3262771

回答

1

如果你開始拖動之前存在於您的文件(或者你可以創建它之前),您可以簡單地指定實例中傳遞給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); 
    } 
} 
+0

謝謝,Groo,我會研究你回答的鏈接和代碼,我會添加評論到我的文章,可能會澄清爲什麼,在這種情況下,我沒有將一個文件格式對象放入DataObject。最好, – BillW 2009-11-09 11:26:02