Drag'n'drop к проблеме формы Windows - PullRequest
4 голосов
/ 19 января 2012

У меня, как и должно быть, простой вопрос по drag'n'drop.У меня есть свежий проект Win Form, в котором форма разрешена для отбрасывания с использованием AllowDrop = true.Следует также упомянуть, что я использую 64-разрядную версию Windows 7.

Просто чтобы быть уверенным, я также подписался на

this.DragDrop += new System.Windows.Forms.DragEventHandler(Form1_DragDrop);

.

Но когда я запускаюприложение и перетащите что-нибудь с моего рабочего стола или из проводника, это означает, что с помощью значка указателя мыши мне все равно не разрешено добавлять в него какие-либо файлы.

Я нашел похожий вопрос, подобный этому (но Win Vista), где проблема заключалась в том, что Visual Studio работал с привилегиями администратора, а не Windows Explorer.Но создание приложения и запуск исполняемого файла приводят к одной и той же проблеме.

Я делал это много раз в прошлом и не мог Google найти способ решить эту проблему.Чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 19 января 2012

По умолчанию целевой эффект перетаскивания операции перетаскивания не указан (DragDropEffects.None).Таким образом, в этом случае не будет никакого события для вашего контроля.Чтобы Control был приемником операции перетаскивания для определенных данных, вы должны указать конкретный DardDropEffect, как показано ниже (используйте события DragEnter или DragOver ):

void Form1_DragDrop(object sender, DragEventArgs e) {
    object data = e.Data.GetData(DataFormats.FileDrop);
}
void Form1_DragEnter(object sender, DragEventArgs e) {
    if(e.Data.GetDataPresent(DataFormats.FileDrop)) {
        e.Effect = DragDropEffects.Copy;
    }
}

Статья по теме MSDN: Выполнение операции перетаскивания в Windows Forms

1 голос
/ 19 января 2012

Вы используете неправильное событие, используйте событие DragEnter.

this.DragEnter += new System.Windows.Forms.DragEventHandler(Form1_DragDrop);
...