2012-03-15 9 views
0

私がタイトルでこれを説明したかどうかは分かりませんが、これは私がしたいことです。
(アクティブなサーバーページのVBで)
私はbut1 ..... but2と呼ばれる5つのボタンを持っています。
今私は オブジェクトではなくオブジェクトの名前を文字列として使用してオブジェクトにアクセスできますか?

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 
+5

が読める、よくフォーマットされた方法で質問をしてにいくつかのより多くの努力を入れてください - –

+2

が誤ってキャップをつけましたhttp://tinyurl.com/so-hints見ます途中でロックするか?あなたは本当に投稿する前に校正するべきです。 –

+0

ああ、vb.netのパワーは、大文字と小文字は区別されません。ドライブC#プログラマーのナット。 "items"をMe.Controlsに置き換えます。または、私.controls :) –

答えて

2

ASP.NET Panelなどのコンテナコントロールに入れ

<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> 

次にあなたが見つけることができます:それは、彼らは同様の意味を持つときDIVとしてレンダリングされますそして、このようにループして:彼らは(GridViewのような)子コントロールにネストされているとき

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

OfTypeもページ全体では動作しますが、ではないでしょう。

あなたの質問はもちろん、あなたがそれらが宣言を追加している直接自分の名前(実際にはID)によってコントロールを参照することができ、少しは不明であるControlCollectionページの:

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 
+0

こんにちは、ありがとう、はい私の要望に答える、私は本当にそれを求める方法を知っていませんでした。 –

関連する問題