みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C# panelのなかのpctureBox

panel1のなかのpictureBox1

QNo.8077421の続き
http://okwave.jp/qa8077421.html

Form1にPicturBox1をはりつけてダブルクリックでイベントハンドラを作る
Properties.Resources.IconH;は、*.bmp
private void pictureBox1_Click(object sender, EventArgs e)
{
pictureBox1.Image = Properties.Resources.IconH;
}
これは、OK
private void pictureBox1_Click(object sender, EventArgs e)
{
int a = 1;
Control c = this.Controls["PictureBox"+a.ToString()];
((PictureBox)c).Image = Properties.Resources.IconH;
}
これも、OK

ここからがうまくいきません。

panel1を貼り付けPicturBox1をpanel1のなかに。

pictureBox1.Image = Properties.Resources.IconH;
これは、OK
ここからです。
int a = 1;
Control c = this.Controls["PictureBox"+a.ToString()];
((PictureBox)c).Image = Properties.Resources.IconH;
これは、NG
NullReferenceException はハンドルされませんでした。
オブジェクト参照がオブジェクト インスタンスに設定されていません。

((PictureBox)c).Image = Properties.Resources.IconH;これ
これをつかいたい。

アドバイスをお願いできませんでしょうか。

投稿日時 - 2013-11-06 02:25:12

QNo.8335989

困ってます

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

>panel1を貼り付けPicturBox1をpanel1のなかに。

this(Form1…かな?)の直下のコントロールではないので、this.Controls[]の中に貼り付けたPicturBox1はありません。
# デバッグでブレークポイントを設定してthis.Controls[]がどうなっているのかウオッチとかで見てみるといいでしょう。
ので…
>Control c = this.Controls["PictureBox"+a.ToString()];
のcがnullになり、
>((PictureBox)c).Image = Properties.Resources.IconH;
でnull参照の例外が発生します。

Control c = this.Controls["panel1"].Controls["PictureBox"+a.ToString()];
とすれば取れるんじゃないですかね。

親子関係や兄弟関係などを調べた方がいいでしょう。

http://dobon.net/vb/dotnet/control/findcontrolbyname.html
のように検索する。という手もありますけどね。

イベントハンドラを複数のコントロールに割り当てていないのならば
((PictureBox)sender).Image = Properties.Resources.IconH;
でも行けると思いますが…。

投稿日時 - 2013-11-06 05:46:41

お礼

ありがとうございます。
Control c = this.Controls["panel1"].Controls["PictureBox"+a.ToString()];
で、うまくいきました。
((PictureBox)sender).Image = Properties.Resources.IconH;
これでも、うまくいきそうです。

投稿日時 - 2013-11-06 21:12:09

ANo.1

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(1)