DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Buttonをたくさん表示させるには?

環境/言語:[XP Home C#]
分類:[.NET]

 初めて質問する初心者です。

 Formにたくさん(約100個)のButtonをおこうとしています。
でも、それだけのButtonを普通に書いていったら、コードが長く
なるので、短くしようとしています。
 そこで、下記のように For を使ったらどうかなということで
試してみました。でも、あっさりとエラーになりました。

private void InitializeComponent()
{
// ここにボタンが配置できるかのコードを書く
for (int i = 1; i < 21; i++)
{
this.btn + i.ToString() = new System.Windows.Forms.Button();
}
  this.SuspendLayout();

 Form1に"btn"は定義されていませんと言われました。
こんなことはできないのでしょうか。
よろしくお願いします。
2004/10/12(Tue) 00:21:09 編集(投稿者)
2004/10/12(Tue) 00:20:02 編集(投稿者)

>  Formにたくさん(約100個)のButtonをおこうとしています。
> でも、それだけのButtonを普通に書いていったら、コードが長く
> なるので、短くしようとしています。
>  そこで、下記のように For を使ったらどうかなということで
> 試してみました。でも、あっさりとエラーになりました。
> this.btn + i.ToString() = new System.Windows.Forms.Button();
>  Form1に"btn"は定義されていませんと言われました。
> こんなことはできないのでしょうか。

残念ながら、上記のようなコードではうまくいかないと思います。
#やりたいことはわかるのですが…(^^;

一例としては次のようなコードが考えられます。

まずは次のようなフィールドを宣言しておきます。

private Button[] btnDynamicButtons = new Button[100];

そして、次のようなメソッドを作っておいて、

private void CreateButton(Size buttonSize)
{
   for(int i=0; i<10; i++)
   {
      for(int j=0; j<10; j++)
      {
         btnDynamicButtons[i*10 + j] = new Button();
         btnDynamicButtons[i*10 + j].Size = buttonSize;
         btnDynamicButtons[i*10 + j].Location = new Point((buttonSize.Width*2)*j, (buttonSize.Height*2)*i);
btnDynamicButtons[i*10 + j].Text = "Button" + (i*10 + j).ToString();
         this.Controls.Add(btnDynamicButtons[i*10 + j]);
      }
   }
}

あとは、フォームコンストラクタでもInitializeComponent内でも
いいので、SuspendLayoutとResumeLayoutの間で
次のように先のメソッドを呼び出します。

CreateButton(new Size(10, 10));

どうしても、インデックスではなくボタンの名前でアクセスしたいとなると、
リフレクションなどを駆使して、結構面倒なことになりそうです。
■No6636に返信(antさんの記事)
> 2004/10/12(Tue) 00:21:09 編集(投稿者)
> 2004/10/12(Tue) 00:20:02 編集(投稿者)
>
> まずは次のようなフィールドを宣言しておきます。
>
> private Button[] btnDynamicButtons = new Button[100];
>
> そして、次のようなメソッドを作っておいて、
>
> private void CreateButton(Size buttonSize)
> {
>    for(int i=0; i<10; i++)
>    {
>       for(int j=0; j<10; j++)
>       {
>          btnDynamicButtons[i*10 + j] = new Button();
>          btnDynamicButtons[i*10 + j].Size = buttonSize;
>          btnDynamicButtons[i*10 + j].Location = new Point((buttonSize.Width*2)*j, (buttonSize.Height*2)*i);
> btnDynamicButtons[i*10 + j].Text = "Button" + (i*10 + j).ToString();
>          this.Controls.Add(btnDynamicButtons[i*10 + j]);
>       }
>    }
> }

 antさん,こんにちは。

antさんの方法で,ばっちりできました。
これで,次に進めます。今度は,ButtonのTextを配列を
利用してできないかに挑戦します。

今回は本当に有難うございました。
■No6640に返信(トコトンさんの記事)
> ■No6636に返信(antさんの記事)
>>2004/10/12(Tue) 00:21:09 編集(投稿者)
>>2004/10/12(Tue) 00:20:02 編集(投稿者)
>>

解決チェックを忘れていました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板