簡體   English   中英

您可以使用其名稱作為字符串而不是對象來訪問對象嗎?

[英]Can you access objects by using their names as a string, instead of a object?

我不知道我是否在標題中解釋了這一點,這就是我想要做的。
(在活動服務器頁面上的VB中)
我有5個叫做but1 ..... but2的按鈕。
現在我有以下代碼使它們不可見

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

將它們放在容器控件中,就像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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM