按名称访问UserControl(String)

时间:2012-11-11 12:07:58

标签: .net vb.net winforms user-controls

我们可以按名称访问UserControl吗?例如,我已经使用名称UserControl制作了uc1(在同一个项目中),并使用名为Panel的{​​{1}}制作了类似的内容:

Panel1

3 个答案:

答案 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在同一个项目中,那么要使用的命名空间就是您自己的根命名空间。您可以在项目属性中找到此命名空间。