C# 在展开的图标窗口中,c托盘应用程序中的ContextMenuStrip未正确响应

C# 在展开的图标窗口中,c托盘应用程序中的ContextMenuStrip未正确响应,c#,windows,visual-studio,C#,Windows,Visual Studio,我制作了一个带有图标的托盘应用程序,点击图标可以打开ContextMenuStrip。我有三个ToolStripMenuItem可以单击 只要图标可以直接看到,托盘应用程序就可以正常工作。但是,如果我必须单击V形以展开不可见的托盘图标,我会遇到一个问题。 我可以通过单击该项打开菜单。如果我单击其中一个ToolStripMenuItems,托盘菜单将进入扩展托盘图标的背景,无法再单击。我怎样才能防止这种情况? 似乎背景捕捉的是单击,而不是打开的窗体 这是菜单的代码 class Menu {

我制作了一个带有图标的托盘应用程序,点击图标可以打开ContextMenuStrip。我有三个ToolStripMenuItem可以单击

只要图标可以直接看到,托盘应用程序就可以正常工作。但是,如果我必须单击V形以展开不可见的托盘图标,我会遇到一个问题。 我可以通过单击该项打开菜单。如果我单击其中一个ToolStripMenuItems,托盘菜单将进入扩展托盘图标的背景,无法再单击。我怎样才能防止这种情况? 似乎背景捕捉的是单击,而不是打开的窗体

这是菜单的代码

class Menu
{
    private static ContextMenuStrip contextMenuStrip;
    private static NotifyIcon notifyIcon1 = new NotifyIcon();
    public Menu()  
    {
        notifyIcon1.Icon = new Icon("icon.ico");
        notifyIcon1.Text = "icon";
        contextMenuStrip = new ContextMenuStrip();
        ToolStripItem stripItem0 = new ToolStripMenuItem("open");
        contextMenuStrip.Items.AddRange(new ToolStripItem[] { stripItem0 });
        ToolStripItem stripItem1 = new ToolStripMenuItem("stop");
        stripItem1.Click += new EventHandler(ToggleTracking);
        contextMenuStrip.Items.AddRange(new ToolStripItem[] { stripItem1 });
        ToolStripItem line = new ToolStripSeparator();
        contextMenuStrip.Items.AddRange(new ToolStripItem[] { line });
        ToolStripItem stripItem2 = new ToolStripMenuItem("close");
        stripItem2.Click += new EventHandler(Close);
        contextMenuStrip.Items.AddRange(new ToolStripItem[] { stripItem2 });

        notifyIcon1.ContextMenuStrip = contextMenuStrip;
        //notifyIcon1.ContextMenu = contextMenu1;
        notifyIcon1.Click += new EventHandler(IconClick);
        notifyIcon1.Visible = true;
    }

    private void ToggleTracking(object Sender, EventArgs e)
    {
        ToolStripMenuItem stripItem1 = (ToolStripMenuItem)contextMenuStrip.Items[1];
        if (stripItem1.Text == "stop")
        {
            stripItem1.Text = "restart";
            Batch.StopTimer();
        }
        else
        {
            stripItem1.Text = "stop";
            Batch.RestartTimer();
        }
    }

    private void Close(object Sender, EventArgs e)
    {
        Application.Exit();
    }
    private void IconClick(object Sender, EventArgs e)
    {
        Control strip = Sender as Control;
        if (contextMenuStrip.Visible)
        {
            contextMenuStrip.Hide();
        }
        else
        {
            contextMenuStrip.Show(Cursor.Position);
        }
    }
}

我不得不像这样使用BringToFront方法

{
    contextMenuStrip.Show(Cursor.Position);
    contextMenuStrip.BringToFront();
}

发布的代码不会重复该行为。你在用那个定时器做什么?现在定时器正在向控制台写东西。我只是想测试一下点击是否有效。这种行为很奇怪,并非总是发生。。。