Как заставить работать Drag&Drop?

У меня есть текстовое поле на winform в Visual Studio. Я хочу перетаскивать на него файлы. Вот что я сделал:

public LangMerge()
{   InitializeComponent();
    this.AllowDrop = true;
    tbxFilepath.AllowDrop = true;
    tbxFilepath.DragDrop += new DragEventHandler(tbxFilepath_DragDrop);
    tbxFilepath.DragEnter += new DragEventHandler(tbxFilepath_DragEnter);
}
void tbxFilepath_DragDrop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    foreach (string file in files) tbxFilepath.Text=(file);
}
void tbxFilepath_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}

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

ОБНОВЛЕНИЕ: я вставил точки останова в методы обработчика событий, и код не попадает в них в первую очередь, независимо от того, что я делаю с курсором.


person Viktor    schedule 03.06.2016    source источник
comment
Работает отлично. Хрустальный шар говорит, что вы используете VS с повышенными правами. Таким образом, ваша программа также работает с повышенными правами. Вы не можете перетащить из приложения без повышенных прав, такого как Explorer, в приложение с повышенными правами. Перезапустите VS и запустите его в обычном режиме.   -  person Hans Passant    schedule 03.06.2016
comment
Странно, потому что я не запускаю его как администратор. Как я могу запустить его без повышенных разрешений?   -  person Viktor    schedule 03.06.2016


Ответы (1)


Вы установили AllowDrop=true; и обработали события DragDrop() и DragEnter(), однако для приложения winforms вам также необходимо обработать событие TextBox.DragOver():

Что-то вроде этого :

private void textBoxFile_DragOver(object sender, DragEventArgs e)
{
   if (e.Data.GetDataPresent(DataFormats.FileDrop))
     e.Effect = DragDropEffects.Copy;
   else
     e.Effect = DragDropEffects.None;
 }
person Pushpendra    schedule 03.06.2016
comment
Вы можете попробовать эти 2 варианта: проверьте повышенные разрешения в свойствах вашего проекта или создайте исполняемый файл вашего приложения и попробуйте перетащить его. - person Pushpendra; 03.06.2016
comment
Вы можете принять ответ, если он работает для вас. Это может помочь другим. Спасибо! - person Pushpendra; 03.06.2016
comment
Спасибо, но мой код, как оказалось, был в порядке. Проблема кроется в другом. - person Viktor; 03.06.2016