【发布时间】:2012-11-11 12:07:57
【问题描述】:
我们可以通过名称访问UserControl 吗?例如,我已经创建了一个名为uc1 的UserControl(在同一个项目中),以及一个名为Panel1 的Panel,所以类似于:
Dim a As String = "uc1"
Panel1.Controls.Add(a)
【问题讨论】:
标签: .net vb.net winforms user-controls
我们可以通过名称访问UserControl 吗?例如,我已经创建了一个名为uc1 的UserControl(在同一个项目中),以及一个名为Panel1 的Panel,所以类似于:
Dim a As String = "uc1"
Panel1.Controls.Add(a)
【问题讨论】:
标签: .net vb.net winforms user-controls
是的。与您的 sn-p 中的内容不相近,您无法将字符串添加到 Controls 集合中。但是您可以使用字符串索引 Controls 集合以获取控件引用。像这样:
Dim ctl as New MyUserControl
ctl.Name = "foo"
Panel1.Controls.Add(ctl)
...
Dim ctl as MyUserControl
ctl = DirectCast(Panel1.Controls("foo"), MyUserControl)
【讨论】:
你可以这样做:
Dim c As Control = Me.Controls("uc1")
或
Dim c As Control = Me.Controls.Find("uc1", True)(0)
If c IsNot Nothing Then
Panel1.Controls.Add(c)
End If
但为什么不直接添加:
Panel1.Controls.Add(uc1)
(假设您的控件在内部存储为uc1 -> Dim uc1 As Control ...。)
【讨论】:
我偶然发现了这个老问题,因为我一直在寻找相同的答案。 前面的答案都假设您已经知道用户控件的名称。如果您想通过给定的字符串变量加载用户控件,则可以使用以下代码。
Dim ControlName as string = "Namespace.ControlName"
Dim oType As System.Type = Type.GetType(ControlName)
Dim obj = System.Activator.CreateInstance(oType)
Panel1.Controls.Add(obj)
这会将用户控件ControlName 添加到Panel1 控件。如果您的用户控件在同一个项目中,则要使用的命名空间是您自己的根命名空间。您可以在项目属性中找到此命名空间。
【讨论】: