- ベストアンサー
pictureboxのイメージ出力処理で
VB.NETを使用しています。 Form上にpicturebox1~picturebox10まで配置しています。 下記の関数の引数aにきた値により1~10のどのpictureboxに画像を出力するか処理をわける方法をどなたかアドバイスお願いします。 現在はselect文を使用して処理しています。 for文などでまとめることはできませんでしょうか? Private Sub Test(ByVal a As String) ※この中でaに1がくるとpiturebox1.Image = 画像 aに10がくるとpicturebox10.image = 画像 という処理をしたい。 このように→picturebox & "a" & ".image" = 画像 End Sub 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
おそらく#1さんのはVB6での話だろう(Indexプロパティ)。 残念ながらVB.NETにはIndexプロパティは無い。では方法はないかと言うと、色んなサイトで紹介されている方法と、今日(ついさっき)私が発明した(いや、元からあるんじゃろうけど)方法を紹介しよう。 1.サイトで紹介されている方法 デザインは使わずに、コードで追加する。PictureBoxの配列をコード上で作成する事はできる。ので、後はこいつらをShowしてやって適切な場所に移動させてやればよい。 2.anmochiが今日発見した方法 デザインで10個置く。やっぱりこれが楽やけんね。で、今フォーム上に10個のPictureBoxがあるわけだが、こいつをコード上でグループ化する。具体的には次のような感じ。コード量を減すために、pic1~pic10と表記。 Public frmTest Inherits Form Private picPictures() As PictureBox ' ここで、中身が空っぽのピクチャーボックス配列を作る Public Sub New() MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 picPictures = New PictureBox() {pic1, pic2, pic3, pic4, pic5, pic6, pic7, pic8, pic9, pic10} ' 10個分の「参照」で配列を作って配列変数に代入 End Sub Private Sub Test(ByVal a As String) picPictures(Integer.Parse(a)).Image = 画像 ' VB6のように、Index感覚でアクセスできる End Sub anmochi法のメリットは、VB.NET IDEのデザインに影響を与えない事だ。デメリットは、数を変えたらグループ化も変更しなくてはならない事。 つまり、数を動的に変更したい場合は1番の方法を、お手軽にグループ化したければ2番のanmochi法を使うと良い。
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
失礼しました。 .NETだったのね^^; http://dobon.net/vb/dotnet/control/buttonarray.html 履歴にもありますよ。
お礼
すいません!コメントが入れ違いになってしまいました。参考ページのリンクありがとうございます。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
フォーム内に、Test(ByVal a As String)メソッドがあるとして、、 Private Sub Test(ByVal a As String) Me.Controls("picturebox" & a).image = 画像 End Sub っていうより、、、 異なる名前のピクチャボックスを使用するより、コントロール配列にした方が、管理しやすいですよ まず、 picturebox1のプロパティでIndex = 0 として、後は同名でIndex値がユニークなピクチャボックスを作成してあげると、Index値で管理できます。 Private Sub Test(ByVal p_intIndex As Integer) Me.picturebox1(p_intIndex).image = 画像 End Sub
補足
1050YENさんアドバイスありがとうございます! Me.Controls("picturebox" & a).image = 画像 は、自分でも試してみたのですが『'image'は'System.Windows.Forms.Forms.Control'のメンバではありません』とのエラーが出てしまい解決できませんでした。 index値を使用する方法は.NETでもできますか? 6.0ではできましたが、.NETでは同名のコントロールを作成できませんでした。
お礼
anmochiさんありがとうございます。 参考にさせていただきます!