为什么DragDrop不能在VS2010下运行?

时间:2011-11-14 15:22:07

标签: winforms visual-studio-2010 drag-and-drop

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

此控件在Visual Studio 2008 Pro下完美运行。我升级到VS 2010专业版,现在,它不起作用。是否有一个标志或属性已经改变,我应该知道??

我做了一个快速演示来测试。这个演示在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;
    }
}

我愿意接受你们可能想到的任何解释或解决方法!

更新

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

1 个答案:

答案 0 :(得分:13)

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