Я пытаюсь создать приложение для 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