.NET:如何将Windows窗体转换为Windows控件

27

我有一个使用.NET 3.5的Windows窗体,我想把它嵌入到另一个窗体中。有没有一种快速的方法将该窗体转换为控件?

谢谢。

4个回答

50

将表单更改为从UserControl继承而不是从Form继承,然后修复任何编译错误。


1
在自己解决这个问题的过程中,我刚刚发现了这个答案。真是太棒了,解决起来非常容易。 - Dan Tao
在 VB.NET 中我该如何实现这个?该窗体只是声明为 Public Class TimeSheetGrid,没有显式的 Inherits - ProfK
在Visual Studio 2012(至少)或我尝试过的相对简单的表单中,仅执行此操作即可生成可用代码,但您无法在VS设计器中打开控件。没有错误,但当您打开设计器时,它仅向您显示所有控件元素的列表,类似于文件对话框元素/等等。但是您看不到控件布局。如果有人知道如何解决,请告诉我! - Quinxy von Besiex
没关系,刚才我没有注意到Control和UserControl之间有很大的区别!这个答案确实提到了UserControl,但是我使用的是Control,这就是我遇到问题的原因。 - Quinxy von Besiex
2
@ProfK 对于未来的任何其他人,需要注意的是,在VB.net中,继承语句位于设计器中。 - majjam

9

还有一种将表单嵌入控件的方法:以下是VB代码:

Public Shared Sub ShowFormInControl(ByRef ctl As Control, ByRef frm As Form)
    If ctl IsNot Nothing AndAlso frm IsNot Nothing Then
        frm.TopLevel = False
        frm.FormBorderStyle = FormBorderStyle.None
        frm.Dock = DockStyle.Fill
        frm.Visible = True
        ctl.Controls.Add(frm)
    End If
End Sub

我想我是从SO的另一篇文章中获取了这段代码,但我不记得具体在哪里了,如果这是你的代码片段,对不起!


1
我认为你需要改变一些东西才能让它在C#中工作,否则编译器会很生气... - Joey

0
我使用了@Neil Barnwell的解决方案,并进行了补充。 我手动编辑了.vbprog文件,并将表单的“SubType”更改为“UserControl”:
<SubType>UserControl</SubType>

这将使项目资源管理器中的图标显示为用户控件,而不是窗体。


-3

并不是说你现在一定要这么做,但将来你可以看看MEF。它是一个框架,用于(除其他外)构建组合应用程序,听起来这可能是你想要实现的内容。


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