码迷,mamicode.com
首页 > Web开发 > 详细

关于 .Net中文件拖放的问题

时间:2015-01-22 15:28:56      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

今日需要做个功能,就是客户直接拖动文件到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 的级别无关。


我的原因是因为我以管理员身份运行了VS···去掉以管理员身份运行,及正常。



关于 .Net中文件拖放的问题

标签:

原文地址:http://blog.csdn.net/yuekunge/article/details/43019245

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!