如何控制 Windows 窗体上下文菜单的位置,当它通过按菜单键显示时

本文关键字:菜单 显示 位置 何控制 控制 上下文 窗体 Windows | 更新日期: 2023-09-27 18:36:48

我有一个自定义的Windows窗体控件,我想在其中添加一个上下文菜单。自定义控件具有可通过键盘或鼠标操作的活动选择。我将自定义控件的 ContextMenu 属性设置为我希望显示的上下文菜单。当用户右键单击时,上下文菜单将显示在预期位置。

但是,当用户按 Menu 键(或等效地按 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);
    }
}

这样,您就不必纠结于右键单击时显示上下文菜单的逻辑。

如何控制 Windows 窗体上下文菜单的位置,当它通过按菜单键显示时

ContextMenuStripShow()方法允许您提供显示它的控件以及位置。

例如以下示例:

this.contextMenuStrip1.Show(button1, new Point(50, 50));

它将在button1右侧和下方 50 像素处显示菜单。仅指定位置时:

this.contextMenuStrip1.Show(new Point(50, 50));

菜单显示在相对于主窗体的位置。