我希望我的usercontrol在设计时在其父表单类中定义(声明和初始化)控件。例如,usercontrol(或其关联的设计器类)应该能够将面板“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
注意:此声明应该是动态的。我知道我可以通过在我的usercontrol中添加“Panel1”作为属性来实现这一点,但我需要的是在代码中添加此声明,而不是将项目作为属性提供。
在具有此功能的内置winforms控件中,例如TabControl和ListView。尝试这种情况:将TabControl添加到设计器中的表单,查看设计器生成的表单文件,您会发现TabPage1和TabPage2已在表单代码中声明和初始化。如果添加另一个选项卡然后再返回设计器生成的文件,您会发现TabControl设计器已将TabPage3添加到已定义的项目,从TabControl中删除这些TabPages,您将发现从文件中删除它们的关联声明和初始化源代码。
如何在我的usercontrol和/或其设计者中实现这一目标? 谢谢您的帮助。
答案 0 :(得分:0)
通过使用功能可以实现: IDesignerHost.CreateComponent 在控件的设计器主机接口实例上,从控件设计器的代码中调用(子初始化或充当动词的任何其他方法)。 This is a clear example on how to do it in both Visual Basic and C#, 非常感谢作者。