我喜欢创建一个包含面板的用户控件(在其他控件中)。其他开发人员应该能够在设计时向我的用户控件面板添加其他控件。
不幸的是,我在互联网上找到的所有示例似乎都无法正常工作(或者我做错了什么,可能更有可能)。
对于我所有的代码片段,我创建了一个新的 winforms 项目并添加了一个用户控件,其中只包含一个面板,没有其他内容。该面板填充了整个用户控件。
我在网上找到的第一个解决方案是将我的控件属性如下:
<Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", GetType(IDesigner))> _
Public Class MyUserControl
...
当我编译我的程序并将我的用户控件添加到表单时,我能够将其他控件添加到我的用户控件,但是在设计时和运行时我都看不到这些控件。在窗体上用鼠标拖动控件时,我只能看到控件中添加的控件。
我发现的第二个解决方案是创建自己的ControlDesigner
. 为此,我向公众公开了我的用户控件面板,...
Public Class MyUserControl
Public ReadOnly Property Panel As Panel
Get
Return Me.InnerPanel
End Get
End Property
End Class
...创建了我自己的ControlDesigner
...
Public Class MyUserControlDesigner
Inherits ParentControlDesigner
Public Overrides Sub Initialize(ByVal component As IComponent)
MyBase.Initialize(component)
If (TypeOf MyBase.Control Is MyUserControl) Then
MyBase.EnableDesignMode(DirectCast(MyBase.Control, MyUserControl).Panel, "Panel")
End If
End Sub
End Class
...并更改了我的用户控件的属性:
<Designer(GetType(MyUserControlDesigner))> _
Public Class MyUserControl
...
现在我可以在设计时向我的用户控件添加控件,我什至可以看到这些添加的控件,至少在我启动程序之前是这样。
之后我再也看不到添加的控件,因为设计器生成的代码没有将这些控件添加到Controls
我的面板集合中。
你有什么提示,为什么它不像我想要的那样工作?
由于ControlDesigner
无论如何我都喜欢使用自定义,因此我更喜欢第二种方式的提示或解决方案。
而且我知道,对于这个示例,我不需要使用用户控件,我可以从Panel
. 但这只是我喜欢创建的控件的简化示例,因此继承自Panel
最终不是一个选项。
谢谢您的帮助!