我剛剛完成了構建表格佈局面板中的一個UI的程序的一部分。這個工作到目前爲止,但我注意到,在我可以嘗試我的控制(我添加的功能)在運行周圍的窗體,但現在它在單元格中,他們不能移動到他們的容器單元格外。然而,這是偉大的,正是我所需要的,但我發現控件(例如一個按鈕)將被正確包含在左邊的單元格和單元格的頂部邊界,但底部和右邊界允許控制從它消失。下面有一些截圖來證明:表佈局面板單元格邊界和控制衝突
在這裏,我們看到,該按鈕控制不能移過電池的頂部和左側邊界。
但是在這裏似乎能夠移過電池的底部和右側邊界。
我是如何讓我的控制移動回想起來,我遇到了,我必須設置一些變量部分,如下圖所示:
public static void MouseMove(object sender, MouseEventArgs e)
{
Control control = sender as Control;
Control container = sender as Control;
if (control != null)
{
if (Dragging)
{
if (direction != Direction.Vertical)
{
container.Left = Math.Max(0, e.X + container.Left - DragStart.X);
}
if (direction != Direction.Horizontal)
{
container.Top = Math.Max(0, e.Y + container.Top - DragStart.Y);
}
}
}
}
我想在這裏我沒有設置底部和右容器的邊界,這將是有意義的,但是在探索智能感知,我似乎無法得到container.right和container.bottom爲他們提供了下列提示:
"gets the distance, in pixels, between the right edge of the control, and the left edge of it's container's client area"
和底部不相同,僅用於控件的底部和容器區域的頂部。
有沒有在這附近?也許是一個將控制器底部連接到單元格底部邊界的選項,右邊是相同的?
編輯1:或者也許我需要改變我的mousemove事件以更好地處理碰撞,所以如果有人對此有任何想法,那就太棒了,以前我沒有真正看過太多的碰撞檢測,特別是在winforms中。
嗯,沒有工作。我想我可能需要在這裏做碰撞檢測,也許與控制和它的容器的矩形/界限有關 –
該按鈕是直接添加到TableLayouPanel,還是在另一個控件中? – AlexDev
它在控制中。我像這樣訪問它.. DeviceManager.deviceManagerInstance.Controls [「tableLayoutPanel1」]。Controls [「panelMap」] –