Я хочу, чтобы мой пользовательский элемент управления определял (объявлял и инициализировал) элементы управления внутри своего родительского класса формы во время разработки. Например, пользовательский элемент управления (или связанный с ним класс конструктора) должен иметь возможность объявить панель «Panel1» в своей родительской форме следующим образом:
Partial Class Form1
Inherits System.Windows.Forms.Form
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.MyUserControl1 = New MySolution.MyUserControl
Me.Panel1 = New System.Windows.Forms.Panel
Me.SuspendLayout()
' '
'MyUserControl1
'
Me.MyUserControl1.Controls.Add(Me.Panel1)
Me.MyUserControl1.Location = New System.Drawing.Point(50, 50)
Me.MyUserControl1.Name = "MyUserControl1"
Me.MyUserControl1.Size = New System.Drawing.Size(102, 102)
Me.MyUserControl1.TabIndex = 0
'
'Panel1
'
Me.Panel1.Location = New System.Drawing.Point(1, 1)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(100, 100)
Me.Panel1.TabIndex = 1
'
'Form1
'
Me.ClientSize = New System.Drawing.Size(399, 262)
Me.Controls.Add(Me.MyUserControl1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
Friend WithEvents MyUserControl1 As MySolution.MyUserControl
Friend WithEvents Panel1 As System.Windows.Forms.Panel
End Class
ПРИМЕЧАНИЕ: это объявление должно быть динамическим. Я знаю, что могу добиться этого, добавив «Panel1» в качестве свойства в моем пользовательском элементе управления, но мне нужно добавить это объявление из кода, а не путем предоставления элемента в качестве свойства.
Среди встроенных элементов управления winforms, обладающих такой возможностью, есть, например, TabControl и ListView. Попробуйте этот сценарий: добавьте TabControl в форму в конструкторе, просмотрите созданный дизайнером файл формы, вы обнаружите, что TabPage1 и TabPage2 были объявлены и инициализированы в коде формы. Если вы добавите еще одну вкладку, а затем вернетесь к сгенерированному дизайнером файлу, вы обнаружите, что дизайнер TabControl добавил TabPage3 к определенным элементам, удалите эти TabPages из TabControl, и вы обнаружите, что связанные с ними объявления и инициализации удалены из файла. исходный код.
Как этого можно достичь из моего пользовательского элемента управления и / или его дизайнера? Спасибо за помощь.