トップ回答者
変数名を変更する

質問
-
こんにちは、プログラム中困ったことがあったので、質問させていただきました。
開発環境は「Visual Studio 2005」で、プロジェクトはC#の「windous アプリケーション」です。
いきなりソースコードを張るのですが
touka(pictureBox_ban, pb_masu_1_1);
touka(pictureBox_ban, pb_masu_2_1);
touka(pictureBox_ban, pb_masu_3_1);・・・・
(※このpb_masu_1_1等はPictureBoxの名前です)
この様な処理をできればforループでやりたいのです。
恥ずかしながら、自分は学生でプログラム初心者ですので、少し初心者向けの回答にしていただけるとありがたいです。
お返事お待ちしております。
回答
-
SE_lain の発言:そんなときは配列を作りましょう。
touka(pictureBox_ban, pb_masu_1_1);
touka(pictureBox_ban, pb_masu_2_1);
touka(pictureBox_ban, pb_masu_3_1);・・・・
(※このpb_masu_1_1等はPictureBoxの名前です)
この様な処理をできればforループでやりたいのです。
恥ずかしながら、自分は学生でプログラム初心者ですので、少し初心者向けの回答にしていただけるとありがたいです。
PictureBox[] pictureBoxes = new PictureBox[]{ pb_masu_1_1, pb_masu_2_1, pb_masu_3_1, };
コンストラクタのInitializeComponent()より後であれば、任意のタイミングで作成可能です。
何度も参照するなら、クラスのインスタンスフィールドにしてもいいかも。
ついコピー&ペーストに頼りがちですが、冗長に見えるコードを減らしていくのは大切なことです。
がんばってください。
- 回答としてマーク SE_lain 2009年2月9日 0:04
すべての返信
-
windous → Windows です。
あるコントロール上に配置されているコントロールはControlsプロパティを使って以下のように参照することができます。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controls.aspx
Hoge.Controls["fuga"]
"fuga"は参照したいコントロールの名前です。 -
SE_lain の発言:そんなときは配列を作りましょう。
touka(pictureBox_ban, pb_masu_1_1);
touka(pictureBox_ban, pb_masu_2_1);
touka(pictureBox_ban, pb_masu_3_1);・・・・
(※このpb_masu_1_1等はPictureBoxの名前です)
この様な処理をできればforループでやりたいのです。
恥ずかしながら、自分は学生でプログラム初心者ですので、少し初心者向けの回答にしていただけるとありがたいです。
PictureBox[] pictureBoxes = new PictureBox[]{ pb_masu_1_1, pb_masu_2_1, pb_masu_3_1, };
コンストラクタのInitializeComponent()より後であれば、任意のタイミングで作成可能です。
何度も参照するなら、クラスのインスタンスフィールドにしてもいいかも。
ついコピー&ペーストに頼りがちですが、冗長に見えるコードを減らしていくのは大切なことです。
がんばってください。
- 回答としてマーク SE_lain 2009年2月9日 0:04
-
PictureBox の数が動的に変わるとか、後で追加する必要があるとかで、配列の
サイズが決められない場合は List<T> や ArrayList クラスを使用するという手
もあります。(List<T> がお勧め)List ジェネリック クラス
http://msdn.microsoft.com/ja-jp/library/6sh2ey19(VS.80).aspx
検討ください。 -
もう少し背景を書いてもいいと思いますよ。
画面にいくつPictureBoxがあるのか、そしてそれに対して何をしたいのかというところです。
多分何かしらの処理があって、それを一行一行毎回かくのが手間になるので、ループで記述したいのだと思いますが、それの実現と
変数名の変更という件名がいまいちよくわかりません。
このtoukaというメソッドでは具体的にどんな処理をしていますか?
例えば、toukaという処理が画面の上に3つあるPictureBoxの画像に対して透過処理を行う処理だとすれば、
そもそもpb_masu_1_1、pb_masu_2_1というようにパラメータを渡す必要はないと思うのです。
参考に、もし画面上にPictureBoxが複数配置(3つでも4つでも)されていて、そのPictureBoxの背景色を変えるソースコードを記載しますね。
もしSE_lainさんがやりたい処理が、画面にはってあるPictureBox全部に対して何らかの処理をしたいということであれば、下記のコードで
背景色を変えている部分だけをSE_lainさんがやりたい処理に変えるだけです。
foreach (Control control in this.Controls) { if (control is PictureBox) { PictureBox targetPictureBox = control as PictureBox; targetPictureBox.BackColor = Color.AliceBlue; } } - 編集済み CrimsonPork 2009年2月8日 6:00 .NET 2.0なのにvarキーワードを使ってしまっていたため訂正。
-
<<SurferOnWwwさん
お返事ありがとうございます。
なるほど、リストを使うと動的に確保ができるのですね。
参考にさせていただきます。 -
<<CrimsonPorkさん
<<もう少し背景を書いてもいいと思いますよ。
そうですね。自分でも少し簡単に書きすぎたと思います。申し訳ありません。
このようなやり方があったのですね。これを基にいろいろ調べてみたいと思います。
お返事ありがとうございます。