Переместить панель вокруг панели с фоновым изображением - PullRequest
0 голосов
/ 01 апреля 2012

Я пытаюсь создать приложение для Windows в VB.Net как часть приложения, которое мне нужно, чтобы иметь возможность размещать маркеры и изображения, но у меня большое количество проблем.

Iу меня есть панель, которой я назначил изображение, на которое я хочу поместить маркеры в качестве фона, и затем я добавляю пользовательские панели на панель.

Пользовательская панель, содержащая изображение (маркер) и метку (маркер)name), как будто я просто перемещал панель, а не перемещал изображение маркера и метку имени.

Я пытался назначить обработчики событий MouseDown, MouseUp и MouseMove для каждой из пользовательских панелей, но каждый разЯ пытаюсь переместить панель, она идет повсюду и оставляет черные ящики повсюду.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...