我们可以按名称访问UserControl
吗?例如,我已经使用名称UserControl
制作了uc1
(在同一个项目中),并使用名为Panel
的{{1}}制作了类似的内容:
Panel1
答案 0 :(得分:1)
你可以这样做:
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 ...
。)
答案 1 :(得分:1)
是。与您的代码段中的内容没有任何关系,您无法向Controls集合添加字符串。但是您可以使用字符串索引Controls集合以获取控件引用。像这样:
Dim ctl as New MyUserControl
ctl.Name = "foo"
Panel1.Controls.Add(ctl)
...
Dim ctl as MyUserControl
ctl = DirectCast(Panel1.Controls("foo"), MyUserControl)
答案 2 :(得分:0)
我偶然发现了这个老问题,因为我一直在寻找相同的答案。 之前的答案都假设您已经知道usercontrol的名称。如果要通过给定的字符串变量加载usercontrol,则可以使用以下代码。
Dim ControlName as string = "Namespace.ControlName"
Dim oType As System.Type = Type.GetType(ControlName)
Dim obj = System.Activator.CreateInstance(oType)
Panel1.Controls.Add(obj)
这会将usercontrol ControlName
添加到Panel1
控件。如果您的usercontrol在同一个项目中,那么要使用的命名空间就是您自己的根命名空间。您可以在项目属性中找到此命名空间。