2016-07-10 41 views
0

我正在創建一個Windows窗體,其中包含PictureBox控件,並且需要知道它們相對於窗體的位置。我想將它們的容器更改爲表單,但它們必須保持在它們已有的Panel控件之上。是否有方法通過代碼設置圖片框的容器?設置C#圖片框容器

+0

投資你的時間在WPF; winforms已被棄用。 – Krythic

+0

謝謝,這非常有幫助。 。 。 *不是真的* – Akinni

+0

無論你現在怎麼想,你最終都會轉換爲WPF。我曾經是一個狂熱的Winforms類型的人,用它來做一切事情。一旦我嘗試了WPF,我從來沒有回去。如果你現在不明白,你肯定會遲一點,當發生這種情況時,你應該重新訪問這篇文章。 – Krythic

回答

1

請問您可以通過設置控件Parent屬性然後調用BringToFront方法來完成。

但是改變父母也會改變控制位置的處理,所以爲了保持它的原始位置,你需要知道表單的相對位置。這會讓你回到原來的問題。

控制到窗體的相對位置可以通過使用PointToScreenPointToClient方法,這樣可以deteremined:

public static class ControlUtils 
{ 
    public static Point GetFormLocation(this Control control) 
    { 
     return control.FindForm().PointToClient(control.PointToScreen(control.Location)); 
    } 
} 

所以你可以使用

var formLocation = pictureBox.GetFormLocation(); 

任何時候,你需要知道知道您的圖片框與表單的相對位置。

如果這就是你所需要的,我建議你不要改變它們的容器。但如果你仍然想這樣做,你可以使用這樣的事情:

var location = pictureBox.PointToScreen(pictureBox.Location); 
pictureBox.Parent = pictureBox.FindForm(); 
pictureBox.Location = pictureBox.Parent.PointToClient(location); 
pictureBox.BringToFront(); 
+0

非常感謝。我會試試這個。 – Akinni

+0

代碼工作得很好。不幸的是,這些面板現在覆蓋了這些圖片框。有沒有什麼辦法解決這一問題? – Akinni

+0

我不知道「BringToFront」之外的其他方法。 –