【问题标题】:.NET: How to convert a windows form to a windows control.NET:如何将 Windows 窗体转换为 Windows 控件
【发布时间】:2009-04-01 16:31:03
【问题描述】:

我有一个 .NET 3.5 windows 窗体,我想将它嵌入到另一个窗体中。有没有一种快速的方法可以将该表单转换为控件?

谢谢

【问题讨论】:

    标签: .net winforms visual-studio-2008


    【解决方案1】:

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

    【讨论】:

    • 刚刚在自己解决同样的问题时找到了这个答案。真棒这是多么容易。
    • 如何在 VB.NET 中执行此操作?表单被简单地声明为Public Class TimeSheetGrid,没有明确的Inherits
    • 在 Visual Studio 2012(至少)或我尝试过的相对简单的表单中,这样做可以使代码可用,但您无法在 VS 设计器中打开控件。没有错误,但是当您打开设计器时,只会向您显示所有控制元素的列表,类似于它对文件对话框元素/等的作用。但你看不到控制布局。如果有人知道如何解决这个问题,请告诉!
    • 别在意我上面的评论,我没有看到Control和UserControl之间有很大的区别!这个答案确实是 UserControl,但我使用过 Control,这就是我遇到问题的原因。
    • @ProfK 对于其他任何人来说,在 VB.net 中,继承声明在设计器中
    【解决方案2】:

    还有一种方法可以在控件中嵌入表单:这是 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 上的另一篇文章中获得此代码的,但我不记得在哪里,如果这是您的代码 sn-p,请见谅!

    【讨论】:

    • 我认为你必须改变一些东西才能让它在 C# 中工作,否则编译器会生气......
    【解决方案3】:

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

    <SubType>UserControl</SubType>
    

    这允许项目资源管理器中的图标显示为用户控件,而不是表单。

    【讨论】:

      【解决方案4】:

      并不是说你现在应该这样做,但将来你可以看看MEF。它是一个(除其他外)构建复合应用程序的框架,听起来可能是您想要实现的目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-01
        • 2011-06-16
        • 2010-12-02
        • 2017-04-18
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多