Пользовательский контроль разрешить падение

У меня есть редактор UserControl, который выглядит как редактор WPF's XAML. Я хочу перетаскивать в него узлы деревьев и делать что-то. Система перетаскивания работает для древовидной части. Но я не могу заставить часть drop работать в моем пользовательском элементе управления. (Элемент построен с использованием sharpdevelop библиотек).

Я установил для свойства AllowDrop своего пользовательского элемента управления значение True. Я добавил это в свой контроль:

this.DragDrop += new System.Windows.Forms.DragEventHandler(this.XmlEditControl_DragDrop)

private void XmlEditControl_DragDrop(object sender, DragEventArgs e)
{
    MessageBox.Show("I dropped");
}

Но я никогда не вижу окно сообщений. Я упускаю что-то очевидное?


person phadaphunk    schedule 21.12.2012    source источник


Ответы (1)


Вам нужно будет изменить DragDropEffects из DragEventArgs, когда событие DragEnter запускается первым, чтобы завершить операцию перетаскивания. Таким образом, событие DragDrop сработает

Пример

this.DragEnter += new System.Windows.Forms.DragEventHandler(this.XmlEditControl_DragEnter);
this.DragDrop += new System.Windows.Forms.DragEventHandler(this.XmlEditControl_DragDrop);

private void XmlEditControl_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.All;
}
private void XmlEditControl_DragDrop(object sender, DragEventArgs e)
{
    MessageBox.Show("I dropped");
}

Спасибо,
Надеюсь, вы найдете это полезным :)

person Picrofo Software    schedule 21.12.2012
comment
Не работает. Я все еще вижу знак «Не могу оставить здесь», поэтому мне вообще не разрешено вставлять элемент управления, эффект не срабатывает и мое окно сообщения тоже. :( - person phadaphunk; 21.12.2012
comment
@PhaDaPhunk Не совсем уверен, в чем может быть проблема. Убедились ли вы, что другие события запускаются правильно? Если да, не могли бы вы попробовать показать MessageBox под событием DragOver? :) - person Picrofo Software; 21.12.2012
comment
Делает то же самое. Боже, это раздражает, так как это должно работать. 0_о - person phadaphunk; 21.12.2012
comment
@PhaDaPhunk Правильно ли запускаются другие события, включая, конечно, Load? Возможно, что-то не так с вашим управлением. Вы уверены, что AllowDrop установлено на True? Вы пытались создать другой пользовательский элемент управления и проверить, срабатывает ли DragDrop? - person Picrofo Software; 21.12.2012
comment
да. Проблема заключается в дизайне (вдохновленном SharpDevelop), где элементы управления, формы и классы создаются рефлексией и прочим. Вот где я расплачиваюсь за такой дизайн - person phadaphunk; 21.12.2012
comment
Я понял. Мне пришлось перейти к родителю, к которому пристыкован XmlEditor. И вместо того, чтобы набирать только this.Drag, мне пришлось ввести xmlEditor.TextArea.ActiveArea.Drag........ ой, но теперь это работает, спасибо. Если вы когда-нибудь захотите добавить это в свой ответ, я приму это. - person phadaphunk; 22.12.2012
comment
@PhaDaPhunk Я рад, что ваша проблема решена. Хорошего дня :) - person Picrofo Software; 22.12.2012