2012-01-19 1 views
4

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

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

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

, а также.

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

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

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

+0

Возможно, связано с http://stackoverflow.com/questions/281706/drag-and-drop-from-windows-file-explorer-onto-a-windows-form-is-not-working – SliverNinja

+0

@SliverNinja - Да, это был тем, о котором я говорил, но предлагаемое решение не сработало для меня. – BlueVoodoo

ответ

7

По умолчанию цель перетаскивания эффект операции перетаскивания и падение не указано (DragDropEffects.None). Таким образом, в этом случае нет события drop для вашего контроля. Чтобы управления быть приемником операции перетаскивания и падения для конкретных данных следует указать конкретный 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 статья: Performing a Drag-and-Drop Operation in Windows Forms

+0

Спасибо. Это сделал трюк. – BlueVoodoo

1

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

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

По какой-то причине подписка на DragEnter работает, но это не то, что я хочу. Это означает, что я запускаю код, как только мой указатель мыши входит в форму. Я хочу, чтобы он срабатывал, когда я отпускал кнопку мыши. – BlueVoodoo

 Смежные вопросы

  • Нет связанных вопросов^_^