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

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

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

なるほど配列ですか……。講義で習ったのですが曖昧な理解のままでした^^;
このような時に使えるのですね、便利そうです。
使いこなせるように頑張って勉強します!
みなさんご回答ありがとうございました!
投稿者 るきお  (社会人) 投稿日時 2012/1/11 20:23:42
たとえば、このようにしてできます。
  
Dim pic As PictureBox = Me.Controls("PictureBox" & a)

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


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

1+1=2

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

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

投稿者 帝王  (社会人) 投稿日時 2012/1/11 15:12:50
配列が理解できれば、「楽」ですけどね。

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

1+1=2

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

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

配列を勉強しましょう。

格言

「急がばまわれ」 。
投稿者 葉月  (社会人) 投稿日時 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/9 14:45:29
(削除されました)
投稿者 さなだ丸  (社会人) 投稿日時 2012/1/9 08:33:44
ぱっと、思いつくとするなら、PictureBoxをコレクションにして、そのコレクションの変数でPictureBoxを呼び出して処理するとか・・・。

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

効率化を狙って動かなければ元も子もないしね。
そもそも、たかが20くらい気合が無けりゃだめなのかい?
投稿者 グリム  (学生) 投稿日時 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まで書いていけば動きそうですが、非効率的ですよね^^;
何かもっとスマートにできる方法はないものでしょうか?
ご回答よろしくお願いします。