Перетаскивание не работает в приложении C# Winforms

Я пытаюсь создать форму windows, на которую я могу удалить файл/папку.

У меня есть следующий код в приложении WinForms

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Debug.Print("DragEnter");
    }

    private void Form1_DragDrop(object sender, DragEventArgs e)
    {
        MessageBox.Show("Dropped!");
    }
}

Я установил свойство AllowDrop в true. Я попытался запустить приложение в debug в Visual Studio. Основываясь на ответах на другие подобные вопросы, я попытался запустить скомпилированный exe в качестве администратора. Я попытался запустить скомпилированный exe-файла не от имени администратора.

но что бы я ни делал, я не удается запустить событие DragDrop. Событие DragEnter тут однако огонь,. Что я упускаю?

7 ответов


- Это DragDropEffect соответствующее значение? Попробуйте поместить это в метод обработчика событий DragEnter:

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Console.WriteLine("DragEnter!");
        e.Effect = DragDropEffects.Copy;
    }

по умолчанию было установлено значение DragDropEffects.None таким образом, событие Drop не будет срабатывать.


для тех, кто будет читать это, потому что советы выше не работают.

обратите внимание, что Drag&Drop не будет работать, если вы запустите Visual Studio или приложение "как администратор", как указано здесь: https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm


попробуйте использовать что-то подобное в своем Form1_DragEnter:

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.All;
    else
    {
        String[] strGetFormats = e.Data.GetFormats();
        e.Effect = DragDropEffects.None;
    }
}

это запускает ваш Form1_DragDrop


Не забудьте в свойствах формы изменить AllowDrop для "True" ваш код, вероятно, в порядке, но если это свойство не включено в true, оно не будет работать. По умолчанию установлено значение false.


вы написали события MouseDown и MouseMove объекта, из которого вы перетаскиваете.


еще одна очень неприятная и сложная проблема может быть, что вы переопределили OnHandleCreated, но забыл вызвать базовую реализацию. Затем ваше приложение не может установить необходимые внутренние настройки окна, чтобы уважать ваш AllowDrop собственность.

Е. Г., убедитесь, что вызов base.OnHandleCreated(e) в переопределении, и вы будете в порядке.


У меня также была эта озадачивающая проблема, несмотря на то, что форма AllowDrop установлена в true!

в моем приложении Windows Forms (VS2017) я должен был убедиться, что установил допустимый объект запуска: e.g myprojectname.Программа и все было хорошо!