2010-02-19 90 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。