0

我们可以UserControl通过名称访问 a 吗?例如,我已经制作了一个UserControl(在同一个项目中),名称为uc1,和一个Panel名为Panel1,所以类似于:

Dim a As String = "uc1"
Panel1.Controls.Add(a)
4

3 回答 3

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 ...。)

于 2012-11-11T12:35:40.793 回答
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)
于 2012-11-11T12:38:04.123 回答
0

我偶然发现了这个老问题,因为我正在寻找相同的答案。前面的答案都假设您已经知道用户控件的名称。如果要通过给定的字符串变量加载用户控件,则可以使用以下代码。

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。如果您的用户控件在同一个项目中,则要使用的命名空间是您自己的根命名空间。您可以在项目属性中找到此命名空间。

于 2018-03-16T08:24:05.823 回答