.net 如何将控件放到用户控件中的面板上?

.net 如何将控件放到用户控件中的面板上?,.net,visual-studio,winforms,.net,Visual Studio,Winforms,我创建了一个有3个面板的UserControl 我要做的是将其中一个面板暴露给VisualStudio设计器,以便您可以在该面板中放置控件 目前,我在表单上有UserControl,但如果将文本框拖到表单上,则会在UserControl上绘制文本框,而不是用户控件的一部分。要使嵌套面板可设计,需要进行手术。这些步骤在本文中得到了很好的解释。在@nobugz answer中的博客文章非常棒。我认为下面的vb示例可能对其他人有所帮助 正常创建用户控件 在本例中,控件名为HorizontalColla

我创建了一个有3个面板的UserControl

我要做的是将其中一个面板暴露给VisualStudio设计器,以便您可以在该面板中放置控件


目前,我在表单上有UserControl,但如果将文本框拖到表单上,则会在UserControl上绘制文本框,而不是用户控件的一部分。

要使嵌套面板可设计,需要进行手术。这些步骤在本文中得到了很好的解释。

在@nobugz answer中的博客文章非常棒。我认为下面的vb示例可能对其他人有所帮助

正常创建用户控件

在本例中,控件名为HorizontalCollapsablePanel,ContentPanel是要向设计器公开的面板

Public Class Designer
    Inherits System.Windows.Forms.Design.ControlDesigner

    Public Overrides Sub Initialize(ByVal component As System.ComponentModel.IComponent)
        MyBase.Initialize(component)

        EnableDesignMode(DirectCast(component, HorizontalCollapsiblePanel).Content, "Content")

    End Sub

End Class
将设计器属性添加到class语句中

<System.ComponentModel.Designer(GetType(HorizontalCollapsiblePanel.Designer))> _
Public Class HorizontalCollapsiblePanel

请注意,System.Windows.Forms.Design.ControlDesigner需要对System.Design.dll的引用。

干杯!我发现的大多数VB.Net示例似乎都是直接的C#转换,没有测试它是否有效。这种方式对我很有吸引力!
Public Class Designer
    Inherits System.Windows.Forms.Design.ControlDesigner

    Public Overrides Sub Initialize(ByVal component As System.ComponentModel.IComponent)
        MyBase.Initialize(component)

        EnableDesignMode(DirectCast(component, HorizontalCollapsiblePanel).Content, "Content")

    End Sub

End Class