Winforms 如何在winform中将上下文菜单指定给toolstrip菜单项?

Winforms 如何在winform中将上下文菜单指定给toolstrip菜单项?,winforms,contextmenustrip,Winforms,Contextmenustrip,我有一个带有ToolStripDropDownButton的ToolStrip,我在代码的运行时向其添加ToolStripMenuItems。我需要有一个默认的ContextMenuStrip,并将其分配给每个菜单项,这样当用户右键单击菜单项时,他将获得上下文菜单条。 可能吗 非常感谢您的帮助。似乎我找到了一些有用的东西,这显然不是完美的,但应该给您一个不错的起点。我假设您有一个名为contextmenustrip1的ContextMenuStrip,其中一些下拉项是aaaToolStripMe

我有一个带有ToolStripDropDownButton的ToolStrip,我在代码的运行时向其添加ToolStripMenuItems。我需要有一个默认的ContextMenuStrip,并将其分配给每个菜单项,这样当用户右键单击菜单项时,他将获得上下文菜单条。 可能吗


非常感谢您的帮助。

似乎我找到了一些有用的东西,这显然不是完美的,但应该给您一个不错的起点。我假设您有一个名为contextmenustrip1的ContextMenuStrip,其中一些下拉项是aaaToolStripMenuItem。然后创建一个私有布尔字段

private static bool clickReleased=false;
aaaTool…的MouseDown事件中,编写以下代码

if (e.Button == MouseButtons.Right)
   clickReleased = true;
然后在MouseUp事件中,写下这个

if (e.Button == MouseButtons.Right)
   {
   if (clickReleased)
      {
        contextMenuStrip1.Show(Cursor.Position);
        clickReleased = false;
      }
   }

希望这能有所帮助。

我在以下方面找到了一个很好的解决方案:

为了节省阅读时间,我还在此处添加了解决方案:

void MenuItemContext(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) return;

        ToolStripMenuItem mID = (ToolStripMenuItem)sender;

        ContextMenu tsmiContext = new ContextMenu();

        MenuItem Item1 = new MenuItem();
        MenuItem Item2 = new MenuItem();

        Item1.Text = "Item1";
        Item2.Text = "Item2";

        tsmiContext.MenuItems.Add(Item1);
        tsmiContext.MenuItems.Add(Item2);

        Item1.Click += new EventHandler(Item1_Click);
        Item2.Click += new EventHandler(Item2_Click);

        hndPass = mID.Text;

        tsmiContext.Show(menuStrip1, menuStrip1.PointToClient(new Point(Cursor.Position.X, Cursor.Position.Y)));
    }

    private String hndPass;

    void Item1_Click(object sender, EventArgs e)
    {
       MenuItem mID = (MenuItem)sender;
        MessageBox.Show("You clicked " + mID.Text + " in the context menu of " + hndPass);
    }
    void Item2_Click(object sender, EventArgs e)
    {
        MenuItem mID = (MenuItem)sender;
        MessageBox.Show("You clicked " + mID.Text + " in the context menu of " + hndPass); ;
    }

玩得开心(-)

我看不到任何直接的方法。Toolstripmenu项与contextmenuitem非常相似。但我非常确定一定有一种方法可以使用Windows API。这是不合适的UI。任何用户都不会认为右键单击菜单项可以做任何事情。创建不可见的UI没有任何意义,只需添加一个子菜单即可。