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”。