按菜单键显示Windows Forms ContextMenu时如何控制它的位置?
How to control the location of Windows Forms ContextMenu when it is shown by pressing the Menu key?
我有一个自定义 Windows 表单控件,我想向其添加上下文菜单。自定义控件具有可通过键盘或鼠标操作的活动选择。我将自定义控件的 ContextMenu
属性设置为我希望显示的上下文菜单。当用户右键单击时,上下文菜单会出现在预期的位置。
但是,当用户按下菜单键(或等效地,Shift-F10
)时,上下文菜单出现在我控件的死点。我希望能够根据选择在控件中的位置来控制上下文菜单出现的位置。这是怎么做到的?它也适用于 ContextMenuStrip
吗?
编辑
我正在根据以下答案编写可行的解决方案。首先,设置 ContextMenu
属性(或 ContextMenusStrip
属性,视情况而定)。然后,覆盖 OnKeyDown
方法以拦截 Shift-F10
,并在这种情况下执行显式 Show()
。
this.ContextMenu = <my context menu>;
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyData == (Keys.Shift|Keys.F10))
{
ContextMenu.Show(this, new Point(<x and y coordinates as appropriate>));
e.Handled = true;
}
else
{
base.OnKeyDown(e);
}
}
这样,您就不必理会右键单击时显示上下文菜单的逻辑。
ContextMenuStrip
的 Show()
方法允许您提供显示它的控件以及位置。
例如下面的例子:
this.contextMenuStrip1.Show(button1, new Point(50, 50));
它将在 button1
右侧下方 50 像素处显示菜单。并且仅指定位置时:
this.contextMenuStrip1.Show(new Point(50, 50));
菜单显示在相对于主窗体的位置。
我有一个自定义 Windows 表单控件,我想向其添加上下文菜单。自定义控件具有可通过键盘或鼠标操作的活动选择。我将自定义控件的 ContextMenu
属性设置为我希望显示的上下文菜单。当用户右键单击时,上下文菜单会出现在预期的位置。
但是,当用户按下菜单键(或等效地,Shift-F10
)时,上下文菜单出现在我控件的死点。我希望能够根据选择在控件中的位置来控制上下文菜单出现的位置。这是怎么做到的?它也适用于 ContextMenuStrip
吗?
编辑
我正在根据以下答案编写可行的解决方案。首先,设置 ContextMenu
属性(或 ContextMenusStrip
属性,视情况而定)。然后,覆盖 OnKeyDown
方法以拦截 Shift-F10
,并在这种情况下执行显式 Show()
。
this.ContextMenu = <my context menu>;
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyData == (Keys.Shift|Keys.F10))
{
ContextMenu.Show(this, new Point(<x and y coordinates as appropriate>));
e.Handled = true;
}
else
{
base.OnKeyDown(e);
}
}
这样,您就不必理会右键单击时显示上下文菜单的逻辑。
ContextMenuStrip
的 Show()
方法允许您提供显示它的控件以及位置。
例如下面的例子:
this.contextMenuStrip1.Show(button1, new Point(50, 50));
它将在 button1
右侧下方 50 像素处显示菜单。并且仅指定位置时:
this.contextMenuStrip1.Show(new Point(50, 50));
菜单显示在相对于主窗体的位置。