Щелкните правой кнопкой мыши в списке, чтобы отобразить контекстное меню, но всплывающее меню появляется в нерелевантной точке экрана.

avatar
Ted Kon
9 августа 2021 в 00:47
66
1
0

Используя приведенный выше код vb.net, мне удалось отобразить всплывающее контекстное меню, когда я щелкнул правой кнопкой мыши выбранный элемент списка.

Private Sub ListViewResults_MouseUp(sender As Object, e As MouseEventArgs) Handles ListViewResults.MouseUp
        If e.Button = Windows.Forms.MouseButtons.Right Then
            lvChangedFilesMenuStrip.Show(ListView1, New Point(e.X, e.Y))
        End If
    End Sub

Что касается второго параметра метода lvChangedFilesMenuStrip.show, который я пробовал

  1. New Point(e.X, e.Y)
  2. Cursor.Position
  3. e.X, e.Y

.. и я вижу, что всплывающее окно все еще появляется в нерелевантной точке экрана! Что я должен сделать, чтобы контекстное меню отображалось прямо под точкой, по которой щелкнули?

Источник
Hursey
9 августа 2021 в 01:02
0

Я никак не могу вспомнить, как это обойти, но вы, вероятно, захотите взглянуть на Control.PointToClient или Control.PointToScreen. docs.microsoft.com/en-us/dotnet/api/… docs.microsoft.com/en-us/dotnet/api/…

Ответы (1)

avatar
jmcilhinney
9 августа 2021 в 01:15
0

Вы не видите проблемы между этим:

Handles ListViewResults.MouseUp

и это

Show(ListView1

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