2010-02-19 215 views

回答

44

非常簡單的說:

用戶控件進行自定義,可重用的組件的方式。用戶控件可以包含其他控件,但必須由表單託管。

Windows窗體是控件的容器,包括用戶控件。雖然它包含許多與用戶控件類似的屬性,但主要目的是託管控件。

+0

用戶控件是否可以託管(包含)其他用戶控件? – 2012-04-30 13:54:59

+0

@RobertNiestroj是的,他們可以。 – LxL 2014-01-02 17:43:23

4

窗體窗體是用戶控件的容器。

+3

所以是一個用戶控件! – 2010-02-19 20:34:25

+0

你如何將一個表單放入用戶控件中? – Fredou 2010-02-19 20:35:10

+1

你不能,但你肯定可以把用戶控件放在用戶控件中。 – 2010-02-19 20:35:43

17

他們有一個lot的共同點,它們都來自ContainerControl。然而,UserControl被設計爲一個子窗口,它需要被放置在一個容器中。表單被設計成沒有父母的頂級窗口。

實際上,你可以通過它的頂層屬性設置爲false變成一個窗體轉換爲子窗口:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     var child = new Form2(); 
     child.TopLevel = false; 
     child.Location = new Point(10, 5); 
     child.Size = new Size(100, 100); 
     child.BackColor = Color.Yellow; 
     child.FormBorderStyle = FormBorderStyle.None; 
     child.Visible = true; 
     this.Controls.Add(child); 
    } 
} 
+3

但是你真的應該避免這麼做,國際海事組織。 :) – 2010-02-20 01:57:42

+0

與Control類的成本相比,您將使用不必要的,非常小的花生,尤其是本地窗口。微軟不會公開TopLevel屬性會很容易。該功能僅僅是模糊的,使用它就好了。 – 2016-08-02 10:08:19

+0

我想我是從代碼清晰度和構圖的角度來講的。當然,你可以做到這一點,當然,這是支持的,但我認爲我的觀點是不把這個好例子當作設計模式:) – 2016-08-02 12:10:29

0

最大的區別是form.show給出了不同的窗口,而用戶控件可是沒有功能,就如同雨後春筍般冒出來沒有家長。兩個控件中的剩餘事物都是相同的,如從Scrollablecontrol派生的beind。

相關問題