Comunque sia, ho utilizzato un sistema semplicissimo.
Ho inserito nel form ("Main") un Panel("Mappa") che come sfondo ha l'immagine della mappa.. (la planimetria).
Due ContextMenu("MenuContestualeAggiungi", "MenuContestualeRimuovi") per la gestione dell'inserimento e la rimozione delle immagini dell'estintore.
Poi ho gestito tutto da codice come segue (codice del form "Main"):
codice:
Dim Immagine As Bitmap
Dim LastContextSender As PictureBox
Private Sub DragMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
DirectCast(sender, PictureBox).DoDragDrop(sender, DragDropEffects.Move)
ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
LastContextSender = sender
End If
End Sub
Private Sub Mappa_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Mappa.DragDrop
Dim DraggingObject As PictureBox = e.Data.GetData(GetType(PictureBox))
Console.WriteLine(DraggingObject.Name)
DraggingObject.Location = Mappa.PointToClient(New Point(e.X - (DraggingObject.Size.Width / 2), e.Y - (DraggingObject.Height / 2)))
DraggingObject = Nothing
e.Effect = DragDropEffects.None
End Sub
Private Sub Mappa_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Mappa.DragEnter
e.Effect = DragDropEffects.Move
End Sub
Private Sub AggiungiPostazioneToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AggiungiPostazioneToolStripMenuItem.Click
Mappa.SuspendLayout()
Dim Postazione As New PictureBox
Postazione.Size = New Size(20, 20)
Postazione.Location = Mappa.PointToClient(New Point(Me.MenuContestualeAggiungi.Left - Postazione.Size.Width / 2, Me.MenuContestualeAggiungi.Top - Postazione.Size.Height / 2))
Postazione.BackgroundImage = Immagine
Postazione.BorderStyle = BorderStyle.FixedSingle
Postazione.ContextMenuStrip = MenuContestualeRimuovi
AddHandler Postazione.MouseDown, AddressOf DragMouseDown
Mappa.Controls.Add(Postazione)
Mappa.ResumeLayout()
End Sub
Private Sub RimuoviToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RimuoviToolStripMenuItem.Click
LastContextSender.Dispose()
End Sub
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Immagine = New Bitmap(Application.StartupPath & "\estintore.jpg")
End Sub