• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++windowsフォームプログラムでデザイナがエラーにならずにコントローラを配列に変更し、イベントも配列にする方法)

VC++のWindowsFormでコントローラを配列にする方法とイベントの配列化について

このQ&Aのポイント
  • VC++のWindowsFormで、ボタンやテキストボックスなどのコントローラを配列にする方法と、イベントも配列にする方法について教えてください。
  • デザイナで作成したソースに手を加えることなく、コントローラを配列として取得する方法はありますか?また、ボタンなどのイベントも配列にすることは可能でしょうか?
  • ボタンが50ほどあるプログラムを考えており、それぞれのボタンは独立ではないため、配列での処理が望ましいです。回答していただけると助かります。

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

  • ベストアンサー
回答No.2

FormのLoadイベントはデザイン画面を表示して、Form1を選択中にしてプロパティウィンドウ(初期は右側に出ると思う) のイベント(雷マーク)のLoadイベントにForm1_Loadと記入すればコードが自動的に挿入されます。 ちなみにbutton1、button2、、、というオブジェクト名であれば、 this->buttons = gcnew Generic::List<Button^>(); for (int i = 1; i <= 5; ++i) {   Button^ btn = static_cast<Button^>(this->Controls[L"button" + i.ToString()]);   this->buttons->Add(btn);   btn->Click += gcnew System::EventHandler(this, &Form1::buttons_Click); } という記述もできます。 (パネル等のコンテナを使っているともう一工夫必要だが) 一応参考 http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200703/07030007.txt

chaw-chaw
質問者

お礼

お礼が遅くなり申し訳ありません。大変理解し易い説明ありがとうございました。 また、他の疑問が浮かんできましたが、タイトルに沿わないので、新しく質問を立てたいと思います。 お時間ありましたらまたよろしくお願いいたします。

その他の回答 (1)

回答No.1

デザイナでちゃんと使えるようにするには、自分で配列に割り当てるような処理を入れないとダメでしょう。 よってボタンが10個、20個あれば、10行、20行と配列に入れる処理を記述する。 たとえば、FormのLoadイベントで private:   Generic::List<Button^>^ buttons;   System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)   {     this->buttons = gcnew Generic::List<Button^>();     this->buttons->Add(this->button1);     this->buttons->Add(this->button2);     this->buttons->Add(this->button3);     this->buttons->Add(this->button4);     this->buttons->Add(this->button5);          for each (Button^ btn in this->buttons) {       btn->Click += gcnew System::EventHandler(this, &Form1::buttons_Click);     }   }   System::Void buttons_Click(System::Object^ sender, System::EventArgs^ e)   {     MessageBox::Show(static_cast<Button^>(sender)->Name);   } という風にするとか。

chaw-chaw
質問者

お礼

ありがとうございます! イベント処理をひとつにしてsenderで識別するのは思いつきませんでした!非常に有用な情報ありがとうございました。 しかし、前半の配列化する部分は力不足のため理解できず、コンパイルエラーを回避できません。。 Loadイベントとはどこで発生するのでしょうか。もう少し具体的に教えていただけるとありがたいです。