C#中将一个文件拖到一个控件中(比如richTextBox)将其打开,怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中将一个文件拖到一个控件中(比如richTextBox)将其打开,怎么做?相关的知识,希望对你有一定的参考价值。
我想了半天了 但是实现不了 请哪位高手举一个实例吧 拜谢啊 越详细越好 我是菜鸟
请先将richTextBox 的的属性AllowDrag置为True,然后实现拖放分类下的事件,比如DragDrop等 参考技术A 看看这两个 参考技术B 你想上传还是干嘛?c#拖放功能
【中文标题】c#拖放功能【英文标题】:c# Drag and drop functionality 【发布时间】:2010-10-16 06:11:38 【问题描述】:简而言之,我想制作一个应用程序,用户可以在其中将文件从他们的 finder (mac) 或他们的计算机资源管理器 (PC) 拖到我应用程序上的某个位置,然后将该拖动的文件加载到应用。
我无法访问任何拖放事件(据说),因为我正在为所有 GUI 使用渲染引擎。 (确切地说,这是在 Unity3D 中制作的)
无论如何,我真正需要知道的是如何获取用户碰巧在任何特定时间拖动的任何文件的文件路径。我可以负责检测文件被拖到哪里,将文件加载到应用程序中,等等。
有什么帮助吗?
P.S:尽管我可能无法访问拖放事件、类名等,但了解它们仍然很有帮助!
【问题讨论】:
msdn.microsoft.com/en-us/library/ms678405.aspx 【参考方案1】:使用 WinForms 很容易做到(那里有相应的事件)。
由于您没有使用 WinForms,因此您需要使用 WinAPI。 您可以使用RegisterDragDrop Function 和IDropTarget 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 并实现 IDropTarget
。 hwnd
是窗口的句柄。没用过Unity3D,帮不了你:(
我怀疑 Unity3d 是否带有必要的类,尽管我下载的 DLL 文件可能。我不知道窗口句柄是什么,我也无法在文本框中实现任何东西。我通常只调用 GUI.TextBox(定位/文本参数)。 Unity3Di 非常适合 3D 游戏,但它的 UI 引擎相当糟糕。 :( 还有其他选择吗?
您可以实现特定于平台的拖放功能。我认为 Mac 使用剪贴板进行拖放,但除此之外,我不知道。在 Windows 上,您可以从 Unity3D 窗口中快速获取hwnd
。如果没有,您可以尝试FindWindow
WinAPI 函数。太糟糕了,你没有使用 WinForms - 你很快就会有一个有效的拖放操作。以上是关于C#中将一个文件拖到一个控件中(比如richTextBox)将其打开,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
c# winform中怎么使用richtextbox?在工具栏中将它拖到指定地点之后要怎么做?是要写代码吗?具体的代码是