Почему DragDrop не работает под VS2010? - PullRequest
6 голосов
/ 14 ноября 2011

У меня есть приложение winforms, которое использует UserControl. Работа пользовательского элемента управления состоит в том, чтобы собрать файл, который пользователь перетаскивает на него из проводника 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;
    }
}

Я открыт для любых объяснений или исправлений, которые вы, ребята, можете придумать!

UPDATE:

Я протестировал, используя комментарии, перечисленные ниже. Все еще не работает. Тем не менее, я отметил, что это не работает только в среде разработки. Когда я захожу в каталог bin и запускаю программу вручную, она работает нормально. Это просто не работает, когда я нахожусь в среде разработки, что затрудняет отладку. Все еще ищу исправление большой картинки.

1 Ответ

13 голосов
/ 14 ноября 2011

Вероятной причиной сбоя здесь является UIPI, компонент пользовательского интерфейса UAC.Вы не можете перетащить процесс без прав доступа и перейти в окно, принадлежащее процессу с повышенными правами.Это будет срабатывать при запуске Visual Studio с ярлыка, на котором включена опция «Запускать программу от имени администратора» на вкладке «Совместимость».Единственный обходной путь - отключить эту опцию.Или запустить его непосредственно из файла .exe, как вы обнаружили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...