我正在制作一个日历从C#中使用WinForms。 我已经把它放在一起使用一个面板的二维数组,并在里面我有一个代表约会的自定义控件列表<>。C#WinForms用鼠标拖动控件
用户需要能够将约会控件从一个面板拖动到另一个面板(从一天到另一天)。
自定义控件有一个MouseDown和MouseUp事件,它将控件向上传递给Parent.Parent(自定义控件 - >日期面板 - >日历窗体),并调用公共方法StartDragging()和StopDragging()分别。
在这些方法中,我制作了自定义控件的一个副本并将其添加到Form中,并将其存储在名为DraggedControl的窗体中的全局变量中。
表单具有的MouseMove的事件,其任务是这样的:
void Calendar_MouseMove(object sender, MouseEventArgs e)
{
if (DraggedControl == null)
return;
DraggedControl.Location = PointToClient(MousePosition);
Refresh();
}
有两个问题,但是:
所有的- 首先,自定义控制下一切。我可以看到它在MouseDown和MouseUp上被添加和删除,但它在面板和day标签下的0,0处添加。
- 其次,它看起来并没有随着MouseMove一起移动。我有一种感觉,这可能是因为我正在按下按钮移动鼠标,这将代表一个拖动操作而不是基本的MouseMove。
如果我删除了MouseUp代码,控件会用鼠标拖动,但只要鼠标进入面板(该控件很可悲地在下面),拖动操作就会停止。
你会建议我做什么? 我怀疑可能有更好的方法来做我想做的事情。