用户控件 vs. Windows窗体

66

在Visual Studio - C#中,用户控件和窗体有什么区别?

5个回答

62

简单来说:

用户控件是制作自定义可重用组件的一种方式。用户控件可以包含其他控件,但必须由窗体托管。

Windows 窗体是控件的容器,包括用户控件。虽然它有许多类似于用户控件的属性,但其主要目的是托管控件。


2
用户控件可以承载(包含)其他用户控件吗? - Robert Niestroj
2
@RobertNiestroj 是的,他们可以。 - LxL
用户控件在Java中是JPanel,而Windows窗体在Java中是JFrame。 - undefined

29

它们有很多共同点,它们都来源于ContainerControl。但是UserControl被设计为子窗口,需要放置在容器中。Form被设计为无父窗口的顶级窗口。

您实际上可以通过将其TopLevel属性设置为false来将Form转换为子窗口:

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);
    }
}

4
在我看来,你真的应该避免这样做。 :) - Dave Markle
你会浪费一点点内存,但与 Control 类和特别是本地窗口的成本相比,这只是小巫见大巫。微软很容易不暴露 TopLevel 属性。该功能只是晦涩难懂,使用它是完全可以的。 - Hans Passant
1
我想我是从代码清晰度和组合的角度来说的。当然,你可以这样做,而且当然也支持,但我认为我的观点是不要将这个好的例子作为设计模式 :) - Dave Markle

4
一个Windows窗体是用户控件的容器。

你如何将表单放入用户控件中? - Fredou
2
你不能这样做,但你可以在用户控件中放置另一个用户控件。 - Dave Markle
2
@Dave - 你其实可以的。看看我的帖子。 - Hans Passant

2
最大的区别在于form.show会产生一个不同的窗口,而usercontrol没有像弹出式窗口这样的功能。两个控件的其它方面相同,例如它们都是从Scrollablecontrol派生而来的。

0
用户控件是一个空白控件,它由其他控件组成。构建用户控件类似于构建表单。它有一个设计表面,在设计表面上拖放控件,设置属性和事件。用户控件可以整合UI和代码后端。用户控件只能在定义它们的项目中使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接