Как получить положение мыши, когда появляется контекстное меню? - PullRequest
6 голосов
/ 16 апреля 2010

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

Что мне нужно, когда всплывает контекстное меню, так это получить текущую позицию мыши.

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

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

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

Тогда я просто могу:

 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
}

Может кто-нибудь помочь мне получить аргументы о событиях мыши или предложить событие, которое будет запущено до появления контекстного меню?

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

Ответы [ 4 ]

9 голосов
/ 17 апреля 2010

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

Следующее может помочь в качестве отправной точки. Здесь я получаю текущие координаты мыши на всем экране, а затем использую 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);
  }
}
1 голос
/ 16 апреля 2010

Обработайте щелчок мыши вашего 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
0 голосов
/ 16 апреля 2010

вы можете захотеть взглянуть на ContextMenuStrip Class и Control.ContextMenuStripChanged Event , некоторые примеры здесь

0 голосов
/ 16 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...