Как получить mouseposition, когда контекстное меню появляется?

У меня есть панель, которая содержит много полей изображения. Каждое поле изображения зарегистрировало "contextRightMenu" как их контекстное меню.

То, что я хочу, когда контекстное меню открывается, должно получить текущий mouseposition.

Я попытался получить mouseposition при помощи mouseDown и щелчка, но эти события происходят после того, как один из объектов контекстного меню нажат, и это слишком поздно.

раскрывающееся событие контекстного меню не обеспечивает событие от нажатия мыши args, таким образом, я не знаю, как получить mouseposition.

Если я могу получить событие от нажатия мыши args, это легко.

Затем я просто могу:

 this.contextRightClick.Popup += new System.EventHandler(this.contextRightClick_Popup);

// If EventArgs include mouseposition within the sender
private void contextRightClick_Popup)(object sender, EventArgs e)
{
   int iLocationX = sender.Location.X;
   int iLocationY = sender.Location.Y;

   Point pPosition = new Point(iLocationX + e.X, iLocationY + e.Y);  // Location + position within the sender = current mouseposition
}

Кто-либо может помочь мне или получить некоторое событие от нажатия мыши args или предложить событие, которое будет работать перед contextmenu всплывающими окнами?

Заранее спасибо

6
задан Ikky 16 April 2010 в 08:10
поделиться

4 ответа

0
ответ дан 10 December 2019 в 00:35
поделиться

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

0
ответ дан 10 December 2019 в 00:35
поделиться

Вы хотите, чтобы положение курсора относительно PictureBox щелкнули правой кнопкой мыши или относительно родительской Panel, или родительского окна, или, возможно, просто положения экрана?

Следующее может помочь в качестве отправной точки. Здесь я получаю текущие координаты мыши на всем экране, а затем, используя SourceControl из contextRightMenu, который является ссылкой на экземпляр элемента управления, который был нажат правой кнопкой мыши, мы конвертируем координаты экрана в точку относительно исходного элемента управления.

void contextRightMenu_Popup(object sender, EventArgs e)
{
  ContextMenu menu = sender as ContextMenu;

  if (menu != null)
  {
    // Get cursor position in screen coordinates
    Point screenPoint = Cursor.Position;

    // Convert screen coordinates to a point relative to the control
    // that was right clicked, in your case this would be the relavant 
    // picture box.
    Point pictureBoxPoint = menu.SourceControl.PointToClient(screenPoint);
  }
}
9
ответ дан 10 December 2019 в 00:35
поделиться

Обрабатывайте MouseClick в PictureBox. Примерно так (в vb.net):

Sub OnMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) handles YourPictureBox.mouseclick

        If e.Button = Windows.Forms.MouseButtons.Right then
        'if you need the screen posistion
        PointToScreen(New System.Drawing.Point(e.X, e.Y))
        'if you need just the location
        e.Location

        end if
end sub
1
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: