我正在使用WinForms在C#中制作日历。 我使用一个二维面板数组把它放在一起,在里面我有一个List<>自定义控件代表约会。
用户需要能够将约会控件从一个面板拖动到另一个面板(每天)。
自定义控件有一个MouseDown和MouseUp事件,它将一条消息从控件传递到Parent.Parent(自定义控件 - >日面板 - >日历表单)并调用公共方法StartDragging()和StopDragging( )分别。
在这些方法中,我复制了自定义控件并将其添加到Form中,并将其存储在名为DraggedControl的表单中的全局变量中。
Form有一个MouseMove的事件处理程序,如下所示:
void Calendar_MouseMove(object sender, MouseEventArgs e)
{
if (DraggedControl == null)
return;
DraggedControl.Location = PointToClient(MousePosition);
Refresh();
}
然而,有两个问题:
如果我删除MouseUp代码,控件确实会用鼠标拖动,但是只要鼠标进入面板(控件就在下面),拖动操作就会停止。
你建议我做什么? 我怀疑可能有更好的方法来做我想做的事。
答案 0 :(得分:2)
自定义控制在一切之下 其他
把它放在首位:
DraggedControl.BringToFront();
它似乎没有移动 所有的鼠标移动
控制,处理MouseDown
事件,捕获鼠标输入并接收所有后续MouseMove
事件,直到它在MouseUp
事件上释放鼠标输入,这就是为什么不调用Calendar_MouseMove()
。处理生成MouseMove
事件的同一控件的MouseDown
事件。