我正在製作一個日曆從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代碼,控件會用鼠標拖動,但只要鼠標進入面板(該控件很可悲地在下面),拖動操作就會停止。
你會建議我做什麼? 我懷疑可能有更好的方法來做我想做的事情。