上下文菜单出现时如何获取鼠标位置?

时间:2010-04-16 08:10:34

标签: c# compact-framework event-handling location

我有一个可容纳许多图片框的面板。每个图片框都注册了“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 个答案:

答案 0 :(得分:9)

您是否希望相对于PictureBox的光标位置被右键单击或相对于父面板,或父窗口或可能只是屏幕位置?

以下内容可能有助于作为起点。在这里,我在整个屏幕上获取当前鼠标cooridnates然后使用来自contextRightMenu的SourceControl,它是对右键单击控件实例的引用,我们将屏幕坐标转换为相对于源控件的点。

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 :(得分:1)

处理PictureBox的MouseClick。像这样(在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

答案 2 :(得分:0)

您可以尝试使用图片框的MouseClick事件,并在右键单击时获取该位置。

答案 3 :(得分:0)