Reputation: 6983
I don't know if I explained this in my title, this is what i want to do.
(In VB on a active server page)
I have 5 buttons called but1.....but2.
Right now I have the following code to make them invisible
but1.Visible=false;
but2.Visible=false;
but3.Visible=false;
but4.Visible=false;
but5.Visible=false,
Is there a way to access the objects by using a string, example
for(i=i;i<6;i++
items("but"+str(i)).visible=false
Upvotes: 0
Views: 87
Reputation: 460238
Put them in a container control like an ASP.NET Panel
that is rendered as a DIV when they have a similar meaning:
<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>
Then you can find and loop them in this way:
Dim allPanelButtons = Panel1.Controls.OfType(Of Button)()
For Each btn In allPanelButtons
btn.Visible = False
Next
OfType
would also work on the whole page, but not when they're nested in child controls(like GridView
).
Your question is a bit unclear, of course you can reference controls by their name(actually the ID)directly when they're added declaratively to the page's ControlCollection
:
Btn1.Visible = False
And yes, it works also to search them by id, but i don't recommend this approach because it's not fail-safe and can cause future problems that happen only on runtime. So just for the sake of completeness:
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
Upvotes: 2