Я делаю календарь From в C #, используя WinForms.Я собрал его, используя двумерный массив панелей, и внутри них у меня есть список <> пользовательских элементов управления, которые представляют встречи.
Пользователь должен иметь возможность перетаскивать элементы управления встречами из одной панели.другому (изо дня в день).
В пользовательском элементе управления есть событие MouseDown и MouseUp, которое передает сообщение из элемента управления в Parent.Parent (пользовательский элемент управления -> панель дня -> форма календаря).и вызывает публичные методы StartDragging () и StopDragging () соответственно.
Внутри этих методов я делаю клон пользовательского элемента управления и добавляю его в форму, и сохраняю его в глобальной переменной в форме, котораяназывается DraggedControl.
Форма имеет обработчик события для MouseMove, который выглядит следующим образом:
void Calendar_MouseMove(object sender, MouseEventArgs e)
{
if (DraggedControl == null)
return;
DraggedControl.Location = PointToClient(MousePosition);
Refresh();
}
Однако есть две проблемы:
- Прежде всегоПользовательский элемент управления находится под всем остальным.Я вижу, как он добавляется и удаляется в MouseDown и MouseUp, но он добавляется в 0,0 под панелями и надписями дня.
- Во-вторых, он вообще не движется с MouseMove.У меня такое ощущение, что это может быть потому, что я двигаю мышь с нажатой кнопкой, и это будет представлять собой действие перетаскивания, а не простое MouseMove.
Если я удалю код MouseUp, элемент управленияперетащите мышью, однако, как только мышь войдет в панели (к сожалению, элемент управления находится под ними), действие перетаскивания прекратится.
Что бы вы предложили мне сделать?Я подозреваю, что, возможно, есть лучший способ сделать то, что я пытаюсь сделать.