C# ContextMenuStrip隐藏和取消隐藏按钮

C# ContextMenuStrip隐藏和取消隐藏按钮,c#,winforms,.net-4.5,C#,Winforms,.net 4.5,我正在为一个项目开发一个系统托盘应用程序。当我点击“打开”按钮时,它不会自动变为“关闭”,我希望有人能告诉我我做错了什么,并帮助我修复它 上下文菜单的代码 using System; using System.Diagnostics; using System.Windows.Forms; using TestApplicationforRIVC.Properties; using System.Drawing; namespace TestApplicationforRIVC {

我正在为一个项目开发一个系统托盘应用程序。当我点击“打开”按钮时,它不会自动变为“关闭”,我希望有人能告诉我我做错了什么,并帮助我修复它

上下文菜单的代码

using System;
using System.Diagnostics;
using System.Windows.Forms;
using TestApplicationforRIVC.Properties;
using System.Drawing;

namespace TestApplicationforRIVC {

    class RIVCContextMenu {

        //Is Add Box Displayed?
        bool isAddLoaded = false;

        //Is the Clear box Displayed?
        bool isClearLoaded = false;

        //Is it listening for voice?
        bool toggleOn = false;

        //Creates this Instance
        public ContextMenuStrip Create() {
            //Add the Default Menu Options
            ContextMenuStrip menu = new ContextMenuStrip();
            ToolStripMenuItem item;
            ToolStripMenuItem off;
            ToolStripSeparator sep;

            if(toggleOn) {
                //Toggle Off
                item = new ToolStripMenuItem();
                item.Text = "Toggle Off";
                item.Click += new EventHandler(toggleOffClick);
                item.Image = Resources.toggleOff;
                menu.Items.Add(item);
            }
            if(!toggleOn) {
                //Toggle On
                item = new ToolStripMenuItem();
                item.Text = "Toggle On";
                item.Click += new EventHandler(toggleOnClick);
                item.Image = Resources.toggleOn;
                menu.Items.Add(item);
            }
            // Separator.
            sep = new ToolStripSeparator();
            menu.Items.Add(sep);

            //Add to RIVC Library
            item = new ToolStripMenuItem();
            item.Text = "Add to Library";
            item.Click += new EventHandler(addClick);
            item.Image = Resources.Add;
            menu.Items.Add(item);

            //Clear RIVC Library
            item = new ToolStripMenuItem();
            item.Text = "Clear Library";
            item.Click += new EventHandler(clearClick);
            item.Image = Resources.Delete;
            menu.Items.Add(item);

            // Separator.
            sep = new ToolStripSeparator();
            menu.Items.Add(sep);

            //Exit Program
            item = new ToolStripMenuItem();
            item.Text = "Exit";
            item.Click += new System.EventHandler(exitClick);
            item.Image = Resources.Exit;
            menu.Items.Add(item);

            return menu;
        }

        //Handles the Click Event of the Toggle On Control
        void toggleOnClick(object sender, EventArgs e) {
            toggleOn = true;
        }

        //Handles the Click Even of the Toggle Off Control
        void toggleOffClick(object sender, EventArgs e) {
            toggleOn = false;
        }

        //Handles the Click Event of the Add Control
        void addClick(object sender, EventArgs e) {
            if(!isAddLoaded) {
                isAddLoaded = true;
                //enter Dialog Box Info
                isAddLoaded = false;
            }
        }

        //Handles the Click Event of the Clear Control
        void clearClick(object sender, EventArgs e) {
            if(!isClearLoaded) {
                isClearLoaded = true;
                //enter dialog box info
                isClearLoaded = false;
            }
        }

        //Handles the Click Event of the Exit Control
        void exitClick(object sender, EventArgs e) {
            Application.Exit();
        }
    }
}

希望你们能帮我解决这个小错误。

您只需要一个菜单项就可以打开/关闭
,如下所示:

item = new ToolStripMenuItem();
item.Name = "onOff";//Name it to refer later if needed
item.Text = "Toggle Off";
item.Click += new EventHandler(toggleOnOffClick);
item.Image = Resources.toggleOff;
menu.Items.Add(item);
注意,toggle on/off项需要一些初始化状态,假设它是off状态(这意味着
toggleOn
的初始化值应该是
false
)。以下是新的
切换onOffClick
事件处理程序:

void toggleOnOffClick(object sender, EventArgs e) {
  var item = sender as ToolStripMenuItem;
  if(toggleOn){
    item.Text = "Toggle off";
    item.Image = Resources.toggleOff;
  } else {
    item.Text = "Toggle on";
    item.Image = Resources.toggleOn;
  }
  toggleOn = !toggleOn;
}

为什么每次都要创建一个全新的菜单?为什么不在单击处理程序中更改ToolStripMenuItem()的.Text()属性?单击“切换打开”时,只需将“切换打开”字段更改为“true”。是否创建ContextMenuStrip的新实例?我建议你按照@Idle\u Mind的建议去做,并修改文本,然后你可以用一个处理程序来修改“toggleOn”。