我们可以UserControl
通过名称访问 a 吗?例如,我已经制作了一个UserControl
(在同一个项目中),名称为uc1
,和一个Panel
名为Panel1
,所以类似于:
Dim a As String = "uc1"
Panel1.Controls.Add(a)
我们可以UserControl
通过名称访问 a 吗?例如,我已经制作了一个UserControl
(在同一个项目中),名称为uc1
,和一个Panel
名为Panel1
,所以类似于:
Dim a As String = "uc1"
Panel1.Controls.Add(a)
你可以这样做:
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 ...
。)
是的。与您的代码片段中的内容不相近,您无法将字符串添加到 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 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
。如果您的用户控件在同一个项目中,则要使用的命名空间是您自己的根命名空间。您可以在项目属性中找到此命名空间。