ここから本文です

VBの2012でコントロール配列をやりたいのですが… 現在16個のピクチャーボックスの...

ino********さん

2015/11/622:05:30

VBの2012でコントロール配列をやりたいのですが…
現在16個のピクチャーボックスの背景を一つ一つ設定しています。

ただ背景色はすべて同じですのでFor文を使えばすっきりすると思ったのですがpictureboxは型です。と表示されます。どのように宣言すればよいのでしょうか。

PictureBox16.BackColor = Color.FromArgb(255, 255, 255)
PictureBox17.BackColor = Color.FromArgb(255, 255, 255)

PictureBox32.BackColor = Color.FromArgb(255, 255, 255)

これを

For i = 16 To 32
PictureBox(i).BackColor = Color.FromArgb(255, 255, 255)
Next
このように書きたいのですが
PictureBoxをどのように宣言すればいいのかが分かりません。

閲覧数:
89
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

kak********さん

2015/11/701:49:42

'コード例
Public Class Form1
Private pictureBoxList As List(Of PictureBox)

Public Sub New()

' この呼び出しはデザイナーで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後で初期化を追加します。

pictureBoxList = New List(Of PictureBox)
pictureBoxList.Add(Me.PictureBox16)
pictureBoxList.Add(Me.PictureBox17)
'以下必要数を記述する
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each box As PictureBox In pictureBoxList
box.BackColor = Color.FromArgb(255, 255, 255)
Next
End Sub

End Class


.NETで実装されるのでしたらGenericのリストを使うのがベターと思います。
VB6 or VBAのサンプルコードで見かけるようなオブジェクトを名前で参照する実装は、オブジェクトの名前を変更した場合にコードを手で修正する必要が出て来るので避けた方が賢明です。
また、リストにコントロールを格納するコードはフォームの初期化の一環と考えられるので、コンストラクタに記述するのが適切だろうと思います。

また、実行時に背景色を変更する動作がなくて、デザイン時にコントロールの設定をまとめて変更するのが面倒なのでループ処理をと言う意図の場合は、質問者さんのような実装はなくした方が良いです。デザイン時の作業を簡易にするために毎回コードを実行するということは、ほんのわずかでも毎回毎回、実行時間が長くなっている、表現を変えるとパフォーマンスが悪くなっているということです。
デザイン時の手間は1回で済みますが、コードの実行は毎回のことですので、処理にそれだけ無駄な時間を費やすことになります。

デザイナでShiftキーを押しながらまとめて変更するコントロールを選択。プロパティウィンドウでプロパティを変更すると選択したコントロールのプロパティが同じ値に設定できます。

質問した人からのコメント

2015/11/7 21:59:41

丁寧にありがとうございます。
他の回答者様も丁寧にありがとうございます。

しっかり理解できるよう勉強していきたいと思います。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

sap********さん

2015/11/623:48:07

フォームの変数として
Private myPictureBox(32) As PictureBox
を用意しておいて、
フォームのLoad時に
Set myPictureBox(1) = PictureBox1
Set myPictureBox(2) = PictureBox2
Set myPictureBox(3) = PictureBox3
というようにフォーム上のPictureBoxを配列に登録する。

以後の操作は配列のmyPictureBoxに対して行う。

2015/11/623:38:55

For i As Integer = 16 To 32
CType(Me.Controls("PictureBox" & CStr(i)), PictureBox).BackColor = Color.White
Next

とか。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる