投稿者 るきお  (社会人) 投稿日時 2008/9/29 07:15:52
こんにちは。
移動やアニメーションを伴う画像を描画する際は座標などの状態の管理はプログラマ自身が明示的に行い、描画のみPaintイベントなどで行います。
座標の変更が必要なタイミングで、プログラマは管理している座標の変数を更新して対象PictureBoxのInvalidateメソッドを呼び出します。Invalidateメソッドを呼び出すとPaintイベントが発生します。

ご提示の仕様とは少し違いますが簡単なサンプルを作りましたのでご確認ください。

Public Class Form1

    Private myImages As New List(Of Bitmap)
    Private points As New List(Of Point)

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

        '画像のロード(画像は先にメモリ上に読み込んでおく) 
        myImages.Add(New Bitmap("C:\Test\Sample1.bmp"))
        myImages.Add(New Bitmap("C:\Test\Sample2.bmp"))
        myImages.Add(New Bitmap("C:\Test\Sample3.bmp"))

        '初期設定 
        For i = 0 To myImages.Count - 1
            '白を透明化 
            myImages(i).MakeTransparent(Color.White)
            '初期位置は(0,0) 
            points.Add(New Point(0, 0))
        Next

        'この段階で3つの画像は座標(0,0)に重なって表示されます。 

    End Sub

    Private Sub PictureBox1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles PictureBox1.Click

        '▼対象の画像を決定 
        '「リストボックスで選択されているパスの画像」ということですが、 
        'ここでは[Ctrl]キーか、[Alt]キーかが押されているかいないかで判定しています。 
        '仕様に応じて対象の画像の決定方法は適宜変更してください。 
        Dim targetIndex As Integer

        Select Case Control.ModifierKeys
            Case Keys.Control
                'Controlキーが押されている場合は0番目が対象 
                targetIndex = 0
            Case Keys.Alt
                'Altキーが押されている場合は1番目が対象 
                targetIndex = 1
            Case Else
                '何も押されていない場合は2番目が対象 
                targetIndex = 2
        End Select

        '対象の画像の座標を現在のマウスの座標にセット 
        points(targetIndex) = PictureBox1.PointToClient(System.Windows.Forms.Cursor.Position)

        '※この段階では座標がセットされただけで、画像は描画していない。 

        'PictureBox1に再描画を指示 
        PictureBox1.Invalidate()

    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As ObjectByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

        '現在セットされている座標にそれぞれの画像を描画 
        For i = 0 To myImages.Count - 1
            e.Graphics.DrawImage(myImages(i), points(i))
        Next

        'なお、再描画時にはそれまでの描画内容はすべてクリアされているので、 
        '以前に描画した画像を消すような処理は必要ない。 

    End Sub
End Class