- ベストアンサー
VB2008によるコントロール配列
VB初心者でただ今勉強中です。VB2008です。 Form1の中にたくさん(100個くらい)の星(ビットマップデータ)をちりばめ、その星がランダムに点いたり消えたりするプログラムを作成しようとしています。 フォームにPictureBoxを配置して(星.bmp)とします。 その星を100個フォーム上にちりばめたいのですがPictureBoxを100個も置くのはムダな労力です。 それで配列を使いたいのですが、PictureBoxを1つだけフォームに配置してそれをコード上で配列として使う方法がわかりません。 いろいろ調べてみたのですが初心者にはわからない説明ばっかりで途方に暮れています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんのイメージは こんな感じのことができればいいですか? Public Class Form1 Private PicBox() As PictureBox Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PicBox = New PictureBox(10) {} SuspendLayout() 'PictureBoxの生成と各種パラメータの設定 For i As Integer = 0 To 2 PicBox(i) = New PictureBox PicBox(i).Name = "PictureBox" + i.ToString() 'テスト用に色つけます PicBox(i).BackColor = Color.Red PicBox(i).Size = New Size(20, 20) PicBox(i).Location = New Point(i * 30, 10) Next i 'テスト用にPictureBox3だけずらしてみる PicBox(2).Location = New Point(70, 70) 'フォーム上に追加 Controls.AddRange(PicBox) ResumeLayout(False) End Sub End Class
その他の回答 (3)
いろいろ分からない点があります。 逆に教えてください。 > PictureBoxを配置して(星.bmp) 星.bmp というファイルがあって、それをPictureBoxに表示するということでしょうか?単純に線で星マークを描くだけではだめなのでしょうか。 その”星”の大きさは単なる点ということではないでしょうね。 ある程度の大きさがある場合は、 星と星が部分的に重なる場合があるかどうか(許すかどうか)を 決めていただかなくてはなりません。 重なりを許すとすると、その重なったときのイメージは どんな感じなのでしょうか? 星の部分だけを重ねたいとなると、ちょっと面倒になってきます。 四角のPictureBoxの前に別のPictureBoxが重なると、 単純には前に来た四角の枠で重なってしまいますから。 また、逆に、重なってはならない、とすると、ランダムに 配置する場合に、いままで作成した星(またはPictureBox)と 重ならないことを確認しなくてはならなくなります。 > PictureBoxを1つだけフォームに配置して とありますが、配置してから行いたいのはなぜでしょうか。 bmpファイルをPictureBoxに設定するといったことも コード上で可能ですから念のためお聞きいたします。
お礼
回答ありがとうございます。 >単純に線で星マークを描く~ 何でもよかったのですが、ペイントを使って星の絵を描いてみたのでそれを使いたかっただけです。 >星と星が重なる場合~ そこまで厳密には考えていません、画面上の星が100個ぐらいあればいいという感じなので、別に重なって99や98になってもOKです。 あくまでVBの練習用に自分で作った課題なので。 >PictureBoxを1つだけフォームに配置して~ これは単にピクチャーボックスは「フォームに配置しないとコード上で使えない」と思っていたからです。 今回(回答No.1および2さん)の回答で、フォームに配置しなくてもコード上だけでできることは理解できました。
- tochansa
- ベストアンサー率76% (23/30)
こんにちわ。 いろいろ調べられたのでしたら、その中の何が理解できないのかを提示されることをお勧めします。 きっとotakingさんのスキルアップに繋がる返事がきますよー。 さてさて、この件に関してはDOBON.NETさんのところの記事が参考になるんじゃないかと思います。 読んでみて実行してみてくださいませ。 「動的にコントロールの配列を作成する」 http://dobon.net/vb/dotnet/control/buttonarray.html ※フォーム上には一個も置かずにやる形になりそうですけど。。
お礼
回答ありがとうございます。 >~何が理解でいないのかを提示~きっとotakingさんのスキルアップに~ その通りなんですけど・・・その記事も調べた中に入っておりました。 が、理解できませんでした、ところどころわからない事だらけで。 まだまだ自分は勉強不足なんでがんばります。
- talosoft
- ベストアンサー率26% (6/23)
星を100個用意する方法 for i as integer = 1 to 100 dim newstar as new picturebox = me.picturebox1 dim r as new random newstar.location=new point(r.next(0,me.width-newstar.width),r.next(0,me,height-newstar.height)) me.controls.add(newstar) next ポイントは位置をランダムにすること。 ちなみにコントロールを配列的にあらわす方法はMe.Controlsを使う。
お礼
回答ありがとうございました。 Me.Controlsを使うんですね。 (ちなみにこのプログラム例の4行目、・・・me,height・・・ 間はコンマではなくピリオドですね)
お礼
回答ありがとうございました。 そうです、こんな感じのことがしたかったんです。 これを参考にして完成できました。 回答No.1さんも書いてましたようにControls.AddRenge(PicBox) がポイントなんですね。 ありがとうございました。