У меня есть форма, которая должна перехватывать события DragDrop, DragEnter, DragLeave.Форма имеет много подчиненных элементов управления, и когда пользователь перетаскивает непосредственно через форму, а затем через вложенный элемент управления формы, возникает событие DragLeave формы.Я хотел бы обработать событие DragLeave формы (когда пользователь перетаскивает вне формы), отделенное от событий DragLeave, сгенерированных, когда мышь начинает зависать в субконтроле, который также может обрабатывать события перетаскивания.
Iпрочтите официальную документацию здесь и я до сих пор не знаю, что делать.
В конструкторе я создаю две панели, одна внутри другой, сохраняя пространство между границей формы и самой внешней панелью.и между краем самой внешней панели и самой внутренней панелью.Форма и панели имеют AllowDrop = true
.
![screenshot](https://i.stack.imgur.com/P1Tix.png)
Код:
public Form1()
{
InitializeComponent();
AllowDrop = true;
}
protected override void OnDragLeave(EventArgs e)
{
base.OnDragLeave(e);
Debug.WriteLine("OnDragLeave called");
}
Шаги для воспроизведения:
- Начните перетаскивание файла и, при перетаскивании, наведите курсор на форму.
- Переместите курсор за пределы формы.
- На панели «Вывод» в Visual Studio новая строканапечатано:
OnDragLeave called
. - Когда курсор находится над формой, переместите его, чтобы навести курсор на крайнюю панель.
- На панели «Вывод» в Visual Studio будет напечатана новая строка:
OnDragLeave called
.
Ожидается:
- Должен быть показан только результат шага 3 выше, а не шага 5.
Обновление: Я пытаюсь показать наложение поверх всей формы, когда мышь перетаскивает файл поверх формы.Оверлей создан и протестирован, как и другие события перетаскивания.