変数の値によってどれかの画像を消したい

タグの編集
投稿者 グリム  (学生) 投稿日時 2012/1/9 01:29:18
VB2008を使っています。

画像が20個、PictureBox1~20が表示されているとして、
ボタンをクリックすると、変数aがランダムで1~20のどれかの整数になるとします。
a=1ならPictureBox1の画像を消去し、a=2ならPictureBox2の画像を消去する……
というような事をしたいのですが、全くの初心者で知識が浅いこともありうまい方法が思いつきません。

Select Case a
    Case 1
          PictureBox1.Image.Dispose()
          PictureBox1.Image = Nothing
    Case 2
          PictureBox2.Image.Dispose()
          PictureBox2.Image = Nothing
  (中略)
End Select
というように気合でCase 20まで書いていけば動きそうですが、非効率的ですよね^^;
何かもっとスマートにできる方法はないものでしょうか?
ご回答よろしくお願いします。
投稿者 さなだ丸  (社会人) 投稿日時 2012/1/9 08:33:44
ぱっと、思いつくとするなら、PictureBoxをコレクションにして、そのコレクションの変数でPictureBoxを呼び出して処理するとか・・・。

ただ、非効率的というのは状況によりますよ。
一部のPictureBoxだけ追加の処理をするとかいった拡張が入る可能性があるなら、Selectで羅列するのも悪くないかとおもうよ。

効率化を狙って動かなければ元も子もないしね。
そもそも、たかが20くらい気合が無けりゃだめなのかい?
投稿者 (削除されました)  () 投稿日時 2012/1/9 14:45:29
(削除されました)
投稿者 葉月  (社会人) 投稿日時 2012/1/9 16:14:02
こんにちは
質問内容を見るとPictureBoxの数は固定のようですね。
ランダムな値を配列(今回のサンプルだったらpbs)に割り当てて
ください。

VBの環境がないので単純なサンプルにしました。
もしPictureBoxの数が固定じゃなく、
状況により変わるならListなどのコレクションを使ってください。

>追伸
本当は、複数の画像を描画する時も1つのコントロール(PictureB
oxなど)か、もしくはできるだけ数を減らすのが望ましいです。


>サンプル
Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim pbs As PictureBox() = {Me.PictureBox1, Me.PictureBox2, Me.PictureBox3}

Dim name As String

For i As Integer = 0 To pbs.Length - 1
name = pbs(i).Name
Console.WriteLine(name)
Next
End Sub
投稿者 帝王  (社会人) 投稿日時 2012/1/11 15:12:50
配列が理解できれば、「楽」ですけどね。

VBの回答は「山」ほどあります。

1+1=2

であれば、答えは1つですけど。2=5-3の回答であれば無数に答えが存在します。

V6であれ、VB2010であれC++においても同じであります。

配列を勉強しましょう。

格言

「急がばまわれ」 。
投稿者 拙者  (学生) 投稿日時 2012/1/11 20:07:31
配列が理解できれば、「楽」ですけどね。
>どのように楽なのか、かんで含めるように説明させるとよろしいかと拙者は思う


VBの回答は「山」ほどあります。
>山ほどのサンプルをそなたが提示されることが望ましいと拙者は思う

1+1=2

であれば、答えは1つですけど。2=5-3の回答であれば無数に答えが存在します。

V6であれ、VB2010であれC++においても同じであります。
>どのように 詳しく説明されたほうがよろしいのではないかと拙者は考える

投稿者 るきお  (社会人) 投稿日時 2012/1/11 20:23:42
たとえば、このようにしてできます。
  
Dim pic As PictureBox = Me.Controls("PictureBox" & a)

pic.Image.Dispose()
pic.Image = Nothing
投稿者 グリム  (学生) 投稿日時 2012/1/14 16:04:24
お礼が遅れてしまい申し訳ありません。

なるほど配列ですか……。講義で習ったのですが曖昧な理解のままでした^^;
このような時に使えるのですね、便利そうです。
使いこなせるように頑張って勉強します!
みなさんご回答ありがとうございました!