2012-12-17 21 views
8

我創建了一個允許用戶在窗體上拖動面板的類。我如何確保 用戶不會將兩個面板放在一起?如果他們這樣做,我想移動/或突出顯示其中一個控件,同時它們都是重疊的。如何檢查兩個控件是否在Windows窗體中重疊

我試着在OnMouseDown事件中設置這個,但那並沒有起作用。

此外,窗體上面板的數量因窗體需要顯示的圖片數量而異。面板內每個面板都有一個picturebox。

+0

如果新面板的放置位置已被現有面板覆蓋,您可以嘗試檢查所有現有面板。你只需要對位置和控件大小進行一些數學運算。 – sgud

回答

1

所以我能夠在sgud的建議的幫助下解決這個問題。

訣竅是在引發OnMouseUp事件內部使用Rectangle.Intersect方法。

這是我在它背後使用的直覺。 (它可能不是最好的解決方案)

1)創建我的主面板中的所有控件的列表。

2)遍歷控件併爲每個控件創建一個所有矩形邊界的列表。你可以通過控制來獲得這個結果。邊界

3)遍歷邊界列表並與當前活動元素的邊界相交。
如果返回的矩形的高度和寬度與活動控件的高度和寬度相同,則分配更改背景顏色屬性。

我希望這可以幫助其他人有類似的問題

7

更好的方法是使用Rectangle.Bounds.IntersectsWith方法,它不檢查你,並且能夠產生更乾淨的代碼。我個人並不知道任何性能問題或好處,不管是哪種方式,儘管我會冒險猜測,僅僅循環遍歷控件並檢查它們會比構建列表和循環都快。

Picturebox pic = new Picturebox(); 
foreach(Control picturebox in Form1){ 
    if (pic.Bounds.IntersectsWith(picturebox.Bounds)) 
    { 
     //We have a problem, Houston, because we just collided! 
    } 
} 

我希望這會有所幫助,即使您在前一段時間問過這個問題。

+0

我擡頭看了這個功能,看起來好像會起作用。但是,我不再在這個項目上工作,所以無法對它進行測試。不過謝謝。 –

相關問題