我喜歡創建一個用戶控件(在其他控件中)包含一個面板。開發人員應該能夠在設計時將其他控件添加到我的用戶控件的面板中。
不幸的是,我在互聯網上找到的所有例子似乎都不能正常工作(或者我做錯了什麼,可能更可能)。用戶控件的設計時支持,它是其他控件的容器
對於我所有的代碼片段,我創建了一個新的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
繼承而來的最終不是一個選項。
謝謝你的幫助!