【问题标题】:c# Drag and drop functionalityc#拖放功能
【发布时间】:2010-10-16 06:11:38
【问题描述】:

简而言之,我想制作一个应用程序,用户可以在其中将文件从他们的 finder (mac) 或他们的计算机资源管理器 (PC) 拖到我应用程序上的某个位置,然后将该拖动的文件加载到应用。

我无法访问任何拖放事件(据说),因为我正在为所有 GUI 使用渲染引擎。 (确切地说,这是在 Unity3D 中制作的)

无论如何,我真正需要知道的是如何获取用户碰巧在任何特定时间拖动的任何文件的文件路径。我可以负责检测文件被拖到哪里,将文件加载到应用程序中,等等。

有什么帮助吗?

P.S:尽管我可能无法访问拖放事件、类名等,但了解它们仍然很有帮助!

【问题讨论】:

标签: c# file drag-and-drop filesystems


【解决方案1】:

使用 WinForms 很容易做到(那里有相应的事件)。

由于您没有使用 WinForms,因此您需要使用 WinAPI。 您可以使用RegisterDragDrop FunctionIDropTarget Interface(或使用您自己的)注册您的窗口以接受拖放事件。

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

【讨论】:

  • 嗨!这看起来很棒!我已经下载了 dll 文件的副本,并使用“使用 System.Windows.Forms;”不返回错误。但是,对于应该传递给 RegisterDragDrop 的内容,我真的一无所知!你能启发我吗?另外,只有这台电脑吗?我是从mac开发的,m用户群主要是mac。
  • 我错过了 Mac 部分。 ole32 是 WinAPI (windows) - 不确定它是否也适用于 mac。从未在 Mac 上尝试过。如果幸运的话,IDropTarget 接口已经在您使用的 Unity3D GUI 中实现,您只需实现适当的事件即可。如果没有,您将不得不创建自己的控件并实现接口。因此,如果要将文件拖放到 TextBox,则需要使用 MyTextBox 并实现 IDropTargethwnd 是窗口的句柄。没用过Unity3D,帮不了你:(
  • 我怀疑 Unity3d 是否带有必要的类,尽管我下载的 DLL 文件可能。我不知道窗口句柄是什么,我也无法在文本框中实现任何东西。我通常只调用 GUI.TextBox(定位/文本参数)。 Unity3Di 非常适合 3D 游戏,但它的 UI 引擎相当糟糕。 :( 还有其他选择吗?
  • 您可以实现特定于平台的拖放功能。我认为 Mac 使用剪贴板进行拖放,但除此之外,我不知道。在 Windows 上,您可以从 Unity3D 窗口中快速获取hwnd。如果没有,您可以尝试FindWindow WinAPI 函数。太糟糕了,你没有使用 WinForms - 你很快就会有一个有效的拖放操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2019-11-19
相关资源
最近更新 更多