2010-10-16 167 views
1

簡而言之,我想創建一個應用程序,用戶可以在其中將文件從其查找程序(mac)或其計算機資源管理器(PC)拖到我的應用程序上的某個位置,然後拖動文件被加載到應用程序中。c#拖放功能

我對任何拖放事件都沒有任何訪問權限(應該是),因爲我正在爲所有GUI使用渲染引擎。 (準確地說,這是在Unity3D中製作的)

無論如何,我真正需要知道的是如何獲得用戶在任何特定時間拖動的任何文件的文件路徑。我可以照顧檢測文件被拖動的位置,將文件加載到應用程序等。

任何幫助?

P.S:即使我可能無法訪問拖放事件,類名等,但仍然有助於瞭解它們!

+0

http://msdn.microsoft.com/en-us/library/ms678405.aspx – 2010-10-16 06:48:58

回答

1

使用WinForms很容易(有那裏的事件)。

由於您未使用WinForms,因此需要使用WinAPI。 您可以註冊您的窗口接受使用RegisterDragDrop FunctionIDropTarget Interface(或使用您自己的)拖動&拖放事件。

[DllImport("ole32.dll")] 
static extern int RegisterDragDrop(IntPtr hwnd, IDropTarget pDropTarget); 
+0

嗨!這看起來很棒!我已經下載了一個dll文件的副本,並使用「using System.Windows.Forms;」不會返回錯誤。但是,對於我應該傳遞給RegisterDragDrop的信息,我真的很無能爲力!你能告訴我嗎?另外,這臺電腦只有?我正在開發一個mac,而m用戶基本上是mac。 – 2010-10-16 07:07:35

+0

我錯過了Mac部分。 ole32是WinAPI(windows) - 不知道它是否也適用於mac。從未在Mac上試過。如果幸運的話,「IDropTarget」接口已經在您使用的Unity3D GUI中實現,您只需實現適當的事件即可。如果沒有,你將不得不創建自己的控制並實現接口。所以如果你想把文件放到一個TextBox中,你需要使用帶有'IDropTarget'的MyTextBox。 'hwnd'是窗口的句柄。我從來沒有使用Unity3D,不能幫你:( – 2010-10-16 07:24:34

+0

我懷疑Unity3d帶有類的必要性,儘管我下載的DLL文件是MIGHT。我不知道窗口句柄是什麼,也不能在文本中實現任何東西我通常只是調用GUI.TextBox(定位/文本參數),Unity3Di非常適合3D遊戲,但它的UI引擎非常糟糕:有沒有其他選擇? – 2010-10-16 07:30:14