c# - 从 Windows 文件资源管理器拖放到 Windows 窗体上不起作用

标签 c# winforms drag-and-drop vista64

我在将文件从 Windows 资源管理器拖到 Windows 窗体应用程序时遇到问题。

当我拖动文本时它工作正常,但由于某种原因它无法识别文件。这是我的测试代码:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
    }
}

AllowDrop 在 Form1 上设置为 true,正如我提到的,如果我将文本拖到表单上,它会起作用,而不是实际文件。

我使用的是 64 位 Vista ... 不确定这是否是问题的一部分。

最佳答案

问题来自Vista的UAC . DevStudio 以管理员身份运行,但资源管理器以普通用户身份运行。当您将文件从资源管理器拖放到 DevStudio 托管的应用程序上时,这与非特权用户试图与特权用户通信是一样的。这是不允许的。

当您在调试器之外运行应用程序时,这可能不会显示。除非你在那里以管理员身份运行它(或者如果 Vista 自动检测到它是一个安装程序/设置应用程序)。

你也可以 run explorer as an admin ,至少用于测试。或禁用 UAC(我不建议这样做,因为您真的想在开发期间捕获这些问题,而不是在部署期间!)

关于c# - 从 Windows 文件资源管理器拖放到 Windows 窗体上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/281706/

相关文章:

c# - 使用 MarshalAs(UnmanagedType.LPWStr) 会清理内存吗?

c# - ServiceStack 与 NServiceBus

C# 在操作系统windows中设置环境变量(不执行)

java - 将自定义对象从 JList 拖放到 JLabel

jquery - 如何使用 droppable 从 jquery 日期选择器获取日期

delphi - 使用对话框时无法使 DragAcceptFiles 工作

c# - Microsoft Ajax 工具包引用

c# - 托管和非托管

c# - 自定义光标在 IE9 中不起作用?

c# - MessageBox.Show ("First Name,{0}", textBox1.Text);