2011-01-18 5 views
2

多くのボタン(50+)で構成され、接尾辞番号以外のすべてが同じ名前のフォームがあります。 (btn_0,btn_1,btn_3など)複数のボタンのテキストを1回の操作で変更する

これらのボタンのテキストを1回の操作で変更したいと考えています。

配列のようなボタンを扱う方法はありますか?

btn_[i].Text = "something"? 

おそらく文字列を実行しますか?

答えて

4

これを行うには、一度に各ボタンにアクセスする必要があります。

この

foreach(var btn in this.Controls) 
{ 
    Button tmpbtn; 
    try 
    { 
     tmpbtn = (Button) btn; 
    } 
    catch(InvalidCastException e) 
    { 
     //perform required exception handelling if any. 
    } 
    if(tmpbtn != null) 
    { 
     if(string.Compare(tmpbtn.Name,0,"btn_",0,4) == 0) 
     { 
      tmpbtn.Text = "Somthing"; //Place your text here 
     } 
    } 
} 

のようなループでそれを行うには、使用オーバーロードCompare methodのため見てください。

+1

例外を避けるために、 'btn'変数を' as'を使ってキャストします。 – Shimrod

+0

@ Shimrod「例外を避ける」という意味ではないと思います。「正しい」例外がスローされることを保証することを意味します。 –

+0

@Shimrod @Davidのおかげで提案が..私はtryブロックを使用するのを忘れていました.. –

1

ループを作成できるボタンがいくつあるか分かっている場合は、それは完璧ではないし、これを行うよりスマートな方法かもしれないが、なぜ私は動作しないのか分からない

-1

jqueryを使用して一度にすべての名前を変更してみませんか?

jQuery("form :button").attr('value','Saved!') 
+2

ああ親愛なる!あなたは質問とタグを読んだことがありますか? –

+0

はい、私はその質問自体を簡単に私の例で解決することができ、タグは問題の代替ソリューションを制限する必要があります。 – femseks

+1

Shekharは、winform環境ではjQueryを使用できないということを意味していると思います。この正確なケースでは、あなたの答えは無意味です。 – Shimrod

1

詳細を知っているが、パターンは、おそらくこの

for each(Control c in this.controls) 
{ 
    if(c is Button) //Check the type 
    { 
     Button b = c as button; 
     b.Text="new text"; 
    } 
} 

または使用のように行くしないでくださいは、テキストのブロックとしてそれを行うために、そのautofilとテキスト連結能力に優れています。例:

btn1.text="hi"; 
btn2.text="world"; 
... 
関連する問題