Перетаскивание не работает в приложении 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.
еще одна очень неприятная и сложная проблема может быть, что вы переопределили OnHandleCreated
, но забыл вызвать базовую реализацию. Затем ваше приложение не может установить необходимые внутренние настройки окна, чтобы уважать ваш AllowDrop
собственность.
Е. Г., убедитесь, что вызов base.OnHandleCreated(e)
в переопределении, и вы будете в порядке.
У меня также была эта озадачивающая проблема, несмотря на то, что форма AllowDrop установлена в true!
в моем приложении Windows Forms (VS2017) я должен был убедиться, что установил допустимый объект запуска: e.g myprojectname.Программа и все было хорошо!