我正在使用WinForms和C#制作一个日历。我使用了一个二维Panel数组,并在其中放置了一个自定义控件列表,这些控件代表预约。
用户需要能够将预约控件从一个Panel拖到另一个Panel(从一天到另一天)。
自定义控件有MouseDown和MouseUp事件,它们会将消息从控件传递到Parent.Parent(自定义控件->日面板->日历窗体),并分别调用公共方法StartDragging()和StopDragging()。
在这些方法中,我克隆自定义控件并将其添加到窗体中,并将其存储在窗体的全局变量DraggedControl中。
窗体有一个MouseMove事件处理程序,如下所示:
然而,这里有两个问题:
用户需要能够将预约控件从一个Panel拖到另一个Panel(从一天到另一天)。
自定义控件有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代码,控件会随着鼠标拖动,但是一旦鼠标进入面板(很遗憾,控件在其下面),拖动操作就停止了。
您建议我怎么做? 我怀疑可能有更好的方法来实现我想要做的事情。