windows - Flyt panel rundt panel med baggrundsbillede

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at opbygge en Windows-applikation i VB.Net som en del af applikationen Jeg skal kunne placere markører på og billede, men jeg har et stort antal problemer.


Jeg har et panel, som jeg har tildelt det billede, jeg vil placere markører på som baggrund, og så tilføjer jeg brugerdefinerede paneler til panelet.


Det brugerdefinerede panel, der indeholder et billede (markøren) og en etiket (markørnavnet), som jeg selvom flyttede bare panelet ville være lettere end at flytte markørbilledet og navnetiketten.


Jeg har forsøgt at tildele event handlers til MouseDown, MouseUp og MouseMove til hver af de brugerdefinerede paneler, men hver gang jeg forsøger at flytte panelet går det overalt og efterlader sorte bokse overalt.


Dim image As New System.Drawing.Bitmap(/* Path */)
pnlPreviewPanel.BackgroundImageLayout = ImageLayout.Stretch
pnlPreviewPanel.BackgroundImage = image

pnlPreviewPanel.Controls.Clear()
For Each item As Marker In mMarkers
    Dim panel as New CustomPanel

    AddHandler panel, AddressOf DeviceMouseDown
    AddHandler panel.Controls(0).MouseDown, AddressOf DeviceMouseDown
    AddHandler panel.Controls(1).MouseDown, AddressOf DeviceMouseDown

    AddHandler panel.MouseUp, AddressOf DeviceMouseUp
    AddHandler panel.Controls(0).MouseUp, AddressOf DeviceMouseUp
    AddHandler panel.Controls(1).MouseUp, AddressOf DeviceMouseUp

    AddHandler panel.MouseMove, AddressOf DeviceMouseMove
    AddHandler panel.Controls(0).MouseMove, AddressOf DeviceMouseMove
    AddHandler panel.Controls(1).MouseMove, AddressOf DeviceMouseMove

    pnlPreviewPanel.Controls.Add(panel)
Next

Private Sub DeviceMouseDown(ByVal pSender As Object, ByVal pEventArgs As MouseEventArgs)
    Dim control As Control = pSender
    If Not control.GetType() = GetType(CustomPanel) Then
        control = control.Parent
    End If

    mSelectedPanel = CType(control, CustomPanel)
End Sub

Private Sub DeviceMouseUp(ByVal pSender As Object, ByVal epEventArgs As MouseEventArgs)
    If Not mSelectedDevicePanel Is Nothing Then
        mSelectedDevicePanel = Nothing
    End If
End Sub

Private Sub DeviceMouseMove(ByVal pSender As Object, ByVal pEventArgs As MouseEventArgs)
    If Not mSelectedDevicePanel Is Nothing Then
        Dim x As Integer = pEventArgs.Location.X - pnlPreviewPanel.Location.X
        Dim y As Integer = pEventArgs.Location.Y - pnlPreviewPanel.Location.Y

        mSelectedDevicePanel.Location = New Point(x, y)
    End If
End Sub

Bedste reference