投稿者 葉月  (社会人) 投稿日時 2009/4/24 06:20:37
ボリュームがありますので、わかる範囲で参加します。

>>>「frmA が frmB のコントロールを直接操作してしまう」
>>>方法で、プログラミングされているので、どうしても、そのスタンスになってしまいます。
 過去ログが参考になりそうです。
 http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=144

>>>コントロール配列をプログラムの中で、作成する方法は載っていますが、デザイン画面
>>>で作成したコントロールを配列化(正しくはコレクションにする?)方法は載ってないようです。
 コントロール配列化のイメージが湧かないという解釈でよろしいでしょうか?
 意図が把握しきれておりませんが、一応サンプルコードを掲載します。
 過去に投稿を予定して忘れていたものを、気持ち変更しました。できが悪い点は、ご了承ください。
 サンプルを動かすためには、"画像へのパス"を書き換える必要があります。

>サンプルコード
Imports System.IO

Public Class Form1

    ' スロットで使用するピクチャーボックス 
    Private picSlot(3) As System.Windows.Forms.PictureBox


    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        Me.MyInitializeComponent()
    End Sub


    '''<summary> 
    '''自作のイニシャライズコンポーネント 
    '''※ 自動生成されるイニシャライズコンポーネントも使います 
    '''</summary> 
    Private Sub MyInitializeComponent()
        ' ピクチャーボックスのXとY座標 
        Const INT_PB_X As Integer = 120
        Const INT_PB_Y As Integer = 30
        Const INT_START As Integer = 1

        Dim iPbMove As Integer = 0

        For i As Integer = 0 To 2
            picSlot(i) = New System.Windows.Forms.PictureBox()
            picSlot(i).Name = String.Concat("pictureBox", i)
            'picSlotを配置します。 
            picSlot(i).Location = New System.Drawing.Point((i + INT_START) * INT_PB_X + iPbMove, INT_PB_Y)

            Using stream = New IO.FileStream("画像へのパス", IO.FileMode.Open, IO.FileAccess.Read)
                ' 画像を読み込みます。 
                picSlot(i).Image = System.Drawing.Image.FromStream(stream)
            End Using

            ' クリックイベントを付加 
            AddHandler Me.picSlot(i).Click, New System.EventHandler(AddressOf picClick)
            iPbMove += 27
        Next i

        ' ピクチャーボックスをフォームに追加。 
        Me.Controls.AddRange(picSlot)
    End Sub


    ''' <summary> 
    ''' ピクチャーボックスがクリックされた時に起こるイベント 
    ''' </summary> 
    ''' <param name="sender">未使用</param> 
    ''' <param name="e">未使用</param> 
    Private Sub picClick(ByVal sender As System.ObjectByVal e As System.EventArgs)
        MessageBox.Show("ピクチャーボックスがクリックされました")
    End Sub

End Class