我知道可以在另一个表单中使用Form
作为子控件。
ChildForm child = new ChildForm();
child.TopLevel = false;
child.FormBorderStyle = FormBorderStyle.None;
child.Show();
containerControl.Controls.Add(child);
我意识到这不是Form
的设计目标。我想知道这里的含义是什么,而不是使用UserControl
?有没有真正的缺点?任何大的,不必要的开销?任何意想不到的行为?
另一方面,使用表格有什么好处吗?您可以使用表单对UserControl执行任何操作,如果用作子控件,这可能很有用吗?
我理解Form
和UserControl
都会继承ContainerControl
,但是他们的非继承成员有多么不同呢?
我的方案
我问的原因是因为我有一个现有的Form
控件,我喜欢有时会自行显示(用于开发和作为一个额外的功能) ),但它不需要。但是,我确实需要表单的Closing
事件(不是从ContainerControl
继承),如果文件已被编辑但未保存,我需要能够取消关闭表单。
我在调查结果中也注意到Form
似乎有UserControl
似乎没有的透明度选项,但我不确定这些选项是否有效表格用作儿童控制。
答案 0 :(得分:1)
如果你检查MSDN中的继承层次结构,你发现UserControl和Form都继承自ContainerControl,所以事实上直到他们的基类几乎所有东西都应该是相同的。
这么说,一般来说,我认为你应该避免使用托管作为控件的Form对象,除非你正在处理遗留的不可更改的代码,或者除非你绝对希望这个设计能够在在某些其他情况下,将表单单独显示为顶级非托管位置。
如果您只需要一个容器来放置其他UI控件,则可以使用UserControl。
实际上,Win32级别的所有内容都转换为句柄和消息泵/ WindowProc等,即使是简单的TextBox也会有一个句柄,并且会接收和使用消息来处理客户端和非客户区等等。