我有一个可容纳许多图片框的面板。每个图片框都注册了“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
}
任何人都可以帮助我获得一些鼠标事件参数,或建议一个事件将在上下文菜单弹出之前运行吗?
提前致谢
答案 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)