关于 .Net中文件拖放的问题
今日需要做个功能,就是客户直接拖动文件到winForm界面上,然后显示文件内容。
其实这个功能点就是 获取拖动文件的路径即可。
一般都是需设置三个地方:
1、接受文件的控件的 AllowDrop 属性设置为 true。
2、接受文件的控件加上 DragDrop 事件。
this.dgv_openJsonFile1.Cursor = System.Windows.Forms.Cursors.Default; if(!e.Data.GetDataPresent(DataFormats.FileDrop)) { return; } var path = e.Data.GetData(DataFormats.FileDrop) as string[]; if(path != null && path.Length > 0) { var jsonPath = path[0]; if(!string.IsNullOrEmpty(jsonPath)) { // TODO:jsonPath 及文件的路径。。。 } }
3、接受文件的控件加上 DragEnter事件。
if(e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Link; this.dgv_openJsonFile1.Cursor = System.Windows.Forms.Cursors.Arrow; } else { e.Effect = DragDropEffects.None; }
可是我却搞了很久没搞出来。
知道最后才知道,原来是因为 权限问题:
因为不同权限提升级别的程序之间无法共享拖放消息。您可以做一个简单的实验。用管理员运行记事本,然后从 Windows 资源管理器拖 TXT 文件进去,可以发现文件根本不会打开。因为 Windows Explorer 的权限提升级别为 InvokeAsUser,而不是 RequireAdministrator。 同样级别的权限提升账户运行的程序可以 Share 拖放。 如果不涉及到系统的资源,如拖文件。自己程序内的拖动与 UAC 的级别无关。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。