Динамически генерируемая проблема управления - PullRequest
1 голос
/ 14 июня 2010

У меня есть форма с пристыкованной панелью. Затем я динамически создаю 15 панелей (с именем: panel_n) и 15 графических окон (с именем: picturebox_n) на основной панели (с именем ContainerPanel).

При перетаскивании любого окна рисунка на панель (panel_n), созданную с помощью соответствующих событий мыши. Я хотел бы получить имя панели, на которую была перетащена графическая рамка. Кажется, что курсор мыши захвачен.

Я попытался создать интерфейс IMessageFilter, но до сих пор нет событий, которые срабатывают при перетаскивании одного из Picturebox на любую из панелей.

Функция ClientRectangle.IntersectsWith также не работает, так как значения всегда равны 0,0.

Все, что мне нужно, - это имя панели, на которую перетаскивался графический блок (желательно при событии mouseup)

1 Ответ

1 голос
/ 14 июня 2010

Если вы дадите картинным коробкам событие OnMouseDown, которое говорит что-то вроде этого:

(sender as PictureBox).DoDragDrop(sender, DragDropEffects.Copy);

Затем вы можете установить для свойства AllowDrop панелей значение true, а в их событии OnDragDrop вы можете получить их имя какэто:

string myName = (sender as Panel).Name;

Редактировать: Кроме того, вам нужно дать панелям событие OnDragEnter, например:

e.Effect = DragDropEffects.Copy;

Конечно, вы можете изменить Copy до Move или Link или что угодно, что подходит для того, что вы делаете.Он просто меняет используемый значок указателя мыши.

...