• ベストアンサー

C#のループでtextboxに値を入れる方法

Nameが textbox1 textbox2 ... textbox10 と10個のtextboxがあったとして、 このそれぞれのtextに値を入れたいのですが、 1個ずつ書くのではなく、forとかで入れることは出来ますか? たとえば以下のように、ループで○の部分を変更していくことは可能なのでしょうか? for (int i=1; i<=10; i++) { textbox○.text = i.ToString(); } よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>基本的にはボタンのクリックイベントの中に書いています。 こちらでは問題ありませんけど…なにが 違うんですかねぇ…。 >フォームのインスタンスで実行するなら、 インスタンスではなくコンストラクタでした。 まぁ、InitializeComponent()を実行した後であれば、可能な……ハズなんですけど。 半角での名前は、大文字小文字は区別しないで動作してくれるようですが、 いわゆる全角と半角は区別するでしょうから、その辺りの違いですかねぇ……。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 >とエラーが出てしまいました。 どこでそのコードを実行していますか? というか… ># 指定した名前のコントロールが無かったとき例外発生するかも知れませんが。 かと思われますが。 フォームのインスタンスで実行するなら、 InitializeComponent(); の後でないとコントロールが作成されていませんからいぢろうとしても失敗しますよ。 # ~.Designer.csの中にあるInitializeComponent()を見てみましょう。

macus
質問者

お礼

再度ありがとうございます。 うううう、、、なんか難しい内容になってきてついていけないです(汗) 基本的にはボタンのクリックイベントの中に書いています。 ちなみに最初のほうに public Form1() { InitializeComponent(); } とあるのですが、この中に書かないとダメってことでしょうか? その下に、 private void button4_Click(object sender, EventArgs e) { 処理 } と、処理の中に書いてみてエラーが出てしまいました。。。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>1個ずつ書くのではなく、forとかで入れることは出来ますか? いくつか方法はあるかと思いますが……。 私なら… TextBox[] TargetArray = new TextBox[] {textbox1, textbox2, textbox3, textbox4, textbox5, textbox6, textbox7, textbox8, textbox9, textbox10}; for(int i=0;i < TargetArray.Length;i++) {  TargetArray[i].Text = (i + 1).ToString(); } とかやりまかねぇ。 for (int i=1; i<=10; i++) {  this.Controls["textbox"+i.ToString()].Text = i.ToString(); } でも行けることはいけますかね。 # 指定した名前のコントロールが無かったとき例外発生するかも知れませんが。

macus
質問者

お礼

さっそくの回答ありがとうございます。 for (int i=1; i<=10; i++) {  this.Controls["textbox"+i.ToString()].Text = i.ToString(); } の方法をやってみたのですが、 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 とエラーが出てしまいました。 C#まだ始めて間もないので、簡単なミスかもしれませんが 調べても意味がわから中りませんでした・・・ よろしくお願いします。