您可以使用其名称作为字符串而不是对象来访问对象吗?

时间:2012-03-15 20:42:24

标签: .net vb.net

我不知道我是否在标题中解释了这一点,这就是我想要做的事 (在活动服务器页面上的VB中)
我有5个叫做but1 .....按钮的按钮 现在我有以下代码使它们不可见

but1.Visible=false;
but2.Visible=false;
but3.Visible=false;
but4.Visible=false;
but5.Visible=false,

有没有办法通过使用字符串来访问对象,例如

for(i=i;i<6;i++
       items("but"+str(i)).visible=false

1 个答案:

答案 0 :(得分:2)

将它们放在像ASP.NET Panel这样的容器控件中,当它们具有相似的含义时,它会呈现为DIV

   <asp:Panel id="Panel1" runat="server" CssClass="ButtonPanel">
       <asp:TextBox id="Txt1" runat="server" />
       <asp:Button id="Btn1" Text="click me" OnClick="Button_Click" runat="server"/><br />
       <asp:TextBox id="Txt2" runat="server" />
       <asp:Button id="Btn2" Text="click me" OnClick="Button_Click" runat="server"/><br />
       <asp:TextBox id="Txt3" runat="server" />
       <asp:Button id="Btn3" Text="click me" OnClick="Button_Click" runat="server"/>
   </asp:Panel>

然后你可以用这种方式找到并循环它们:

Dim allPanelButtons = Panel1.Controls.OfType(Of Button)()
For Each btn In allPanelButtons 
    btn.Visible = False
Next

OfType也适用于整个页面,但不会在它们嵌套在子控件中时(例如GridView)。

您的问题有点不清楚,当然,当他们以声明方式添加到页面ControlCollection时,您可以直接通过他们的名称(实际上是ID)引用控件:

Btn1.Visible = False

是的,它也适用于按ID搜索它们,但是我不推荐这种方法,因为它不是故障安全的,并且可能导致将来出现的问题在运行时。所以只是为了完整起见:

For i = 1 To 6
    Dim control = FindControl("Btn" & i)
    If control IsNot Nothing AndAlso TypeOf control Is Button Then
        control.Visible = False
    End If
Next