JU571C3 Ответов: 1

Как узнать, когда мышь находится над полем изображения, созданным кодом?


Привет, я пишу какой-то код, и мне нужно создать полосу контекстного меню, которая меняет его элементы, когда находится над разными графическими полями, 28, если быть точным.
Я пробовал использовать Addhandler, но он не работает.
Мне также нужно было изменить их размер и местоположение, используя ведьму Addhandler, которую я сделал.
Таким образом, в основном, если нажать правую кнопку мыши, она меняет размер (это я смог сделать), а если нажать левую кнопку мыши, она должна открыть полосу контекстного меню(этого я не мог сделать).
Were-это образец моей последней попытки:

Private Sub CCTVs_Handlers()
        AddHandler CCTV1.Click, Sub(obj As Object, args As EventArgs) Drop1()
        AddHandler CCTV1.DoubleClick, Sub(obj As Object, args As EventArgs) CAM1() ' This is to resize the Picturebox , CCTV1 is the Picturebox 
End sub


Private Sub Show_CCTV()
              Me.Text = WText + " - CCTV"
        Panel3.Show()
        Panel3.Location = New Point(76, 3)
        Panel3.Width = 1260
        Panel3.Height = 665

        Dim CCTV1 As New PictureBox
        With CCTV1
            .Location = New Point(0, 0)
            .Width = 90
            .Height = 90
            .BorderStyle = BorderStyle.Fixed3D
            .BackColor = Color.Green
            Panel3.Controls.Add(CCTV1)
            Dim lb As New Label
            With lb
                .Text = "CAM1"
                .Location = New Point(0, 0)
                CCTV1.Controls.Add(lb)
            End With
        End With
End Sub

 Private Sub CAM1()
        If CCTV1.Width = 90 Then
            CCTV1.Width = 400
            CCTV1.Height = 400
            CCTV1.BringToFront()
        Else
            CCTV1.Width = 90
            CCTV1.Height = 90
        End If
    End Sub

    Private Sub Drop1()
               Try
            Dim CCTV1d1 As New ContextMenuStrip
            With CCTV1d1
                .Items.Add("Disable CAM1")
                .Items.Add("Stop Recording")
                .Items.Add("CAM1 Propreties")
                .Items.Add("CAM1 Settings")
                .Items.Add("CCTV Settings")
                .DropShadowEnabled = False
                .BackgroundImageLayout = False
                CCTV1.ContextMenuStrip = CCTV1d1
                CCTV1.Controls.Add(CCTV1d1)

            End With
        Catch ex As Exception
            MsgBox("CCTV1d1 : " & ex.Message & " - " & ex.Source)
        End Try
    End Sub


Что я уже пробовал:

Я пробовал использовать Addhandler, но он не работает
Я попытался связать его с другим подразделом, чтобы он мог вызвать контекстное меню, но это тоже не сработало, и сейчас у меня нет идей
Пожалуйста помочь

1 Ответов

Рейтинг:
4

W∴ Balboos, GHB

Если мы предположим, что во время выполнения может быть нарисовано произвольное количество блоков, то нецелесообразно иметь уникальный набор обработчиков событий для каждого элемента. Нет необходимости в 28 различных обработчиках событий: просто, например, просто обработчик для этого знает, над каким ящиком вы зависли.

Таким образом, вы можете прикрепить событие "mouseIn" к "коробке" вашего изображения. Это установило бы значение, объявленное в более высокой области, чем ваш ящик или обработчики, уникальное для каждого ящика, так что при нажатии на любой конкретный ящик onClick (right/left/double) может знать, на какой именно ящик вы нажали.

Затем обработчик событий может использовать это значение для определения способа реагирования.


JU571C3

И как мне это сделать?
Как мне настроить один обработчик для всего этого?

JU571C3

Не бери в голову, что я наконец-то понял это, большое спасибо Балбусу (серьезно спасибо)