我喜欢创建一个用户控件(在其他控件中)包含一个面板。开发人员应该能够在设计时将其他控件添加到我的用户控件的面板中。
不幸的是,我在互联网上找到的所有例子似乎都不能正常工作(或者我做错了什么,可能更可能)。用户控件的设计时支持,它是其他控件的容器
对于我所有的代码片段,我创建了一个新的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
继承而来的最终不是一个选项。
谢谢你的帮助!