У меня есть панель, которая содержит много полей изображения. Каждое поле изображения зарегистрировало "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 всплывающими окнами?
Заранее спасибо
вы можете взглянуть на класс ContextMenuStrip и событие Control.ContextMenuStripChanged , пример здесь
Вы можете попробовать событие MouseClick для окна изображений и узнать местоположение если это щелчок правой кнопкой мыши.
Вы хотите, чтобы положение курсора относительно 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);
}
}
Обрабатывайте 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