为啥 DragDrop 在 VS2010 下不起作用?

Posted

技术标签:

【中文标题】为啥 DragDrop 在 VS2010 下不起作用?【英文标题】:Why is DragDrop not working under VS2010?为什么 DragDrop 在 VS2010 下不起作用? 【发布时间】:2011-12-28 18:07:25 【问题描述】:

我有一个使用 UserControl 的 winforms 应用程序。用户控件的工作是收集用户从 Windows 资源管理器中放置的文件,打开文件,确定类型并相应地处理它。

此控件在 Visual Studio 2008 Pro 下完美运行。我升级到VS 2010 Pro,现在不行了。是否有我应该注意的标志或属性发生了变化??

我做了一个快速演示来测试。这个演示在 2008 年下完美运行,但在 2010 年下根本无法运行。

设置:创建一个新的 winform 项目。添加用户控件。在用户控件的代码部分中设置以下代码。 (编译以使用户控件出现在工具箱中)将用户控件添加到表单中。运行程序,然后将任何文件从窗口拖到窗体上。如果有效,用户控制区域应该改变颜色。

public partial class UserControl1 : UserControl

    public UserControl1()
    
        InitializeComponent();

        this.AllowDrop = true;
        this.DragDrop += new DragEventHandler(UserControl1_DragDrop);
        this.DragEnter += new DragEventHandler(UserControl1_DragEnter);
        this.DragLeave += new EventHandler(UserControl1_DragLeave);
    

    void UserControl1_DragLeave(object sender, EventArgs e)
    
        this.BackColor = Color.FromName("Control");
    

    void UserControl1_DragEnter(object sender, DragEventArgs e)
    
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        
            e.Effect = DragDropEffects.Copy;
            this.BackColor = Color.Blue;
        
        else
        
            e.Effect = DragDropEffects.None;
        
    

    void UserControl1_DragDrop(object sender, DragEventArgs e)
    
        this.BackColor = Color.Yellow;
    

我愿意接受你们可能想到的任何解释或修复!

更新:

我使用下面列出的 cmets 进行了测试。仍然不起作用。但是,我注意到它只会在开发环境中失败。当我转到 bin 目录并手动启动程序时,它工作正常。当我在开发环境中时它不起作用,这使得调试有点困难。仍在寻找全局修复。

【问题讨论】:

对我来说,在 VS 2010 pro 中从灰色变为蓝色,在悬停时变为蓝色,在下降时变为黄色。 (仅供参考)。 这就是它应该做的。很奇怪!!!我想知道我的VS2010是吐司还是什么。其他一切都完美无缺。谢谢你为我测试。你做了什么与上面的设置不同的事情吗?任何其他启用的开关/标志/属性? 我将代码逐字粘贴到用户控件中,将其添加到驻留在 form_load 上的表单上的面板中,然后对其进行测试。没有触及任何属性。可能是您从工具箱中添加它会使其表现得滑稽。正如我提到的,我以编程方式添加了它: UserControl1 uc1 = new UserControl1(); this.panel1.Controls.Add(uc1); 【参考方案1】:

这里可能的故障原因是 UAC 的用户界面组件 UIPI。您不能从非提升的进程拖放到提升的进程拥有的窗口。当您从在“兼容性”选项卡中打开“以管理员身份运行此程序”选项的快捷方式启动 Visual Studio 时,您将触发此操作。唯一的解决方法是关闭该选项。或者如您所见,直接从 .exe 文件运行它。

【讨论】:

天哪!!就是这样。由于我最近添加的另一个需要写入注册表的控件,我不得不将其设为“管理员”。太感谢了。这让我发疯了。 @Hans 你知道用管理员权限从 Visual Studio 启动具有标准权限的应用程序的方法吗? 在 Main() 中使用 Debugger.Launch(),这样您就可以从 Explorer 启动程序,并在启动后获取附加的调试器。

以上是关于为啥 DragDrop 在 VS2010 下不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 selectAnnotation 在这种情况下不起作用?

为啥消息处理程序在调试模式下不起作用?

为啥 DISTINCT 在这种情况下不起作用? (SQL)

为啥小写 [i] 在可视块模式下不起作用?

为啥转换在我的情况下不起作用

为啥这个 if 语句在这种情况下不起作用? [关闭]