Я написал пользовательский элемент управления (непосредственный дочерний элемент Forms.Control) в C++/CLI, который выгрузит большую часть своей обработки и всю свою картину в отдельный элемент управления MFC на прежнем уровне. Я обертываю этот элемент управления в приложении C#. Мне нужно иметь возможность перетаскивать элементы в элемент управления C++/CLI из UserControl в той же форме в приложении.Почему мой пользовательский контроль не получает события перетаскивания?
По какой-то причине мой пользовательский элемент управления не принимает никаких событий перетаскивания, несмотря на то, что моя настройка AllowDrop равна true. (Я проверял, что AllowDrop верен во время выполнения.) Я никогда не получаю возможность изучить/манипулировать DragEventArgs, потому что обратные вызовы никогда не вызываются.
Я проверил, что перетаскивание в противном случае функционирует нормально. Если я, например, заменил пользовательский элемент управления Panel, я получаю обратные вызовы dragdrop просто отлично.
Есть ли что-то дополнительное, которое должно быть реализовано в элементе управления для поддержки обратных вызовов dragdrop? Есть ли что-то тонкое, с которым нужно иметь дело, чтобы система распознала, что элемент управления находится в курсе и должен быть объектом операции dragdrop?
Примечание:
управление MFC, который будет делать картины еще не доступно для меня, так что я просто живописи простого фона градиента (через OnPaintBackground
), что я пытаюсь рисовать в. Я также рисую меньший прямоугольник градиента в OnPaint
.
Я попытался установить AllowDrop = true как до создания дескриптора настраиваемого элемента управления (через код конструктора/конструктора), так и после создания дескриптора (через OnHandleCreated override). Никакой разницы в поведении.
Курсор перетаскивания никогда не изменяется от курсора по умолчанию, не доступного по сравнению с настраиваемым элементом управления.
Я вызываю this.DoDragDrop()
из обработчика события для события MouseDown
на субконтроллере UserControl.
DragDrop, похоже, работает нормально с другим настраиваемым элементом управления, который я создал на C# в той же сборке, что и пользовательский элемент управления. Он отлично отображает обратные вызовы. Только мой элемент управления C++/CLI не видит их. Инициал-инициализатор не имеет значения. Я могу прокомментировать все без изменений.