Winforms 为什么DragDrop不能在VS2010下工作?

Winforms 为什么DragDrop不能在VS2010下工作?,winforms,visual-studio-2010,drag-and-drop,Winforms,Visual Studio 2010,Drag And Drop,我有一个使用UserControl的winforms应用程序。用户控件的任务是从Windows资源管理器中收集用户放置在其上的文件,打开该文件,确定类型并相应地处理它 此控件在VisualStudio2008Pro下运行良好。我升级到VS 2010 Pro,现在,它不工作了。是否有一个标志或属性已经更改,我应该知道 我做了一个快速的演示来测试。此演示在2008年下运行良好,但在2010年下根本无法运行 设置:创建一个新的winform项目。添加一个用户控件。在用户控件的“代码”部分设置以下代码。

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

此控件在VisualStudio2008Pro下运行良好。我升级到VS 2010 Pro,现在,它不工作了。是否有一个标志或属性已经更改,我应该知道

我做了一个快速的演示来测试。此演示在2008年下运行良好,但在2010年下根本无法运行

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

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;
    }
}
我愿意接受你们可能想到的任何解释或修正

更新:


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

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

在VS 2010 pro中,悬停时从灰色变为蓝色,下降时变为黄色。(仅供参考)。这就是它应该做的。非常奇怪!!!我不知道我的VS2010是烤面包还是什么。其他一切都很完美。谢谢你为我测试。您是否执行了与上述设置不同的操作?是否还有其他启用的开关/标志/属性?我将代码逐字粘贴到用户控件中,将其添加到form_load上表单上的面板中,然后对其进行测试。没有涉及任何属性。可能是您从工具箱中添加它会使其行为有趣。正如我提到的,我以编程方式添加了它:usercontrol1uc1=newusercontrol1();this.panel1.Controls.Add(uc1);天哪!!就这样。由于我最近添加的另一个控件需要写入注册表,所以我不得不将其设置为“管理员”。非常感谢你。这简直让我发疯。@Hans你知道有什么方法可以从Visual Studio以管理员权限运行的标准权限启动应用程序吗?使用Main()中的Debugger.launch(),这样你就可以从资源管理器启动程序,并在程序启动后附加一个调试器。