WinForms:菜单控件ToolStripMenuItem详解

📅 发布时间:2026/7/15 0:24:49 👁️ 浏览次数:
WinForms:菜单控件ToolStripMenuItem详解
目录1. 基础创建和属性设置通过设计器创建代码创建2. 常用属性和设置3. 事件处理4. 动态创建和管理菜单5. 上下文菜单右键菜单6. 实际应用示例7. 高级技巧ToolStripMenuItem是 Windows Forms 中用于创建菜单栏、上下文菜单的常用控件。下面详细介绍它的典型用法1. 基础创建和属性设置通过设计器创建从工具箱拖放MenuStrip到窗体直接输入菜单项文本通过属性窗口设置名称、快捷键等代码创建// 创建主菜单 ToolStripMenuItem fileMenu new ToolStripMenuItem(文件(F)); ToolStripMenuItem editMenu new ToolStripMenuItem(编辑(E)); ToolStripMenuItem viewMenu new ToolStripMenuItem(查看(V)); // 创建子菜单项 ToolStripMenuItem newItem new ToolStripMenuItem(新建(N)); ToolStripMenuItem openItem new ToolStripMenuItem(打开(O)); ToolStripMenuItem saveItem new ToolStripMenuItem(保存(S)); ToolStripMenuItem exitItem new ToolStripMenuItem(退出(X)); // 添加到菜单 fileMenu.DropDownItems.AddRange(new ToolStripItem[] { newItem, openItem, saveItem, new ToolStripSeparator(), exitItem });2. 常用属性和设置// 基本属性设置 ToolStripMenuItem menuItem new ToolStripMenuItem(); menuItem.Text 保存(S); // 设置文本S 表示 AltS 快捷键 menuItem.Name saveToolStripMenuItem; menuItem.ShortcutKeys Keys.Control | Keys.S; // 设置快捷键 CtrlS menuItem.ShowShortcutKeys true; // 显示快捷键提示 menuItem.ToolTipText 保存当前文件; // 工具提示 // 图标设置 menuItem.Image Properties.Resources.save_icon; // 启用/禁用 menuItem.Enabled false; // 禁用菜单项 menuItem.Visible true; // 可见性 // 选中状态 menuItem.Checked true; // 显示勾选标记 menuItem.CheckOnClick true; // 点击时自动切换选中状态3. 事件处理// 点击事件 openItem.Click (sender, e) { using (OpenFileDialog openFileDialog new OpenFileDialog()) { if (openFileDialog.ShowDialog() DialogResult.OK) { // 处理打开文件 } } }; // 下拉菜单显示前的事件 fileMenu.DropDownOpening (sender, e) { // 动态更新菜单项状态 saveItem.Enabled !string.IsNullOrEmpty(currentFile); }; // 菜单项选中事件 menuItem.MouseEnter (sender, e) { statusLabel.Text menuItem.ToolTipText; };4. 动态创建和管理菜单// 动态添加最近打开的文件列表 private void UpdateRecentFilesMenu(ToolStripMenuItem recentMenu, string[] files) { recentMenu.DropDownItems.Clear(); foreach (string file in files) { ToolStripMenuItem fileItem new ToolStripMenuItem(file); fileItem.Click (sender, e) OpenFile(file); recentMenu.DropDownItems.Add(fileItem); } if (files.Length 0) { recentMenu.DropDownItems.Add(new ToolStripSeparator()); ToolStripMenuItem clearItem new ToolStripMenuItem(清除列表); clearItem.Click (s, e) ClearRecentFiles(); recentMenu.DropDownItems.Add(clearItem); } } // 单选菜单组 ToolStripMenuItem viewLargeIcon new ToolStripMenuItem(大图标); ToolStripMenuItem viewSmallIcon new ToolStripMenuItem(小图标); ToolStripMenuItem viewList new ToolStripMenuItem(列表); viewLargeIcon.Click (s, e) { viewLargeIcon.Checked true; viewSmallIcon.Checked false; viewList.Checked false; // 切换视图模式 };5. 上下文菜单右键菜单// 创建上下文菜单 ContextMenuStrip contextMenu new ContextMenuStrip(); ToolStripMenuItem cutItem new ToolStripMenuItem(剪切); ToolStripMenuItem copyItem new ToolStripMenuItem(复制); ToolStripMenuItem pasteItem new ToolStripMenuItem(粘贴); contextMenu.Items.AddRange(new ToolStripItem[] { cutItem, copyItem, pasteItem }); // 绑定到控件 textBox1.ContextMenuStrip contextMenu; // 动态更新上下文菜单 contextMenu.Opening (sender, e) { cutItem.Enabled textBox1.SelectedText.Length 0; copyItem.Enabled textBox1.SelectedText.Length 0; pasteItem.Enabled Clipboard.ContainsText(); };6. 实际应用示例public partial class MainForm : Form { private MenuStrip mainMenu; private ToolStripMenuItem fileMenu; private ToolStripMenuItem editMenu; private ToolStripMenuItem formatMenu; private RichTextBox richTextBox; public MainForm() { InitializeCustomMenu(); } private void InitializeCustomMenu() { // 创建主菜单 mainMenu new MenuStrip(); // 文件菜单 fileMenu new ToolStripMenuItem(文件(F)); fileMenu.DropDownItems.AddRange(new ToolStripItem[] { CreateMenuItem(新建(N), Keys.Control | Keys.N, NewFile_Click, Properties.Resources.new_icon), CreateMenuItem(打开(O), Keys.Control | Keys.O, OpenFile_Click, Properties.Resources.open_icon), CreateMenuItem(保存(S), Keys.Control | Keys.S, SaveFile_Click, Properties.Resources.save_icon), new ToolStripSeparator(), CreateMenuItem(退出(X), Keys.Alt | Keys.F4, Exit_Click, null) }); // 格式菜单 - 带子菜单 formatMenu new ToolStripMenuItem(格式(O)); ToolStripMenuItem fontMenu new ToolStripMenuItem(字体); fontMenu.DropDownItems.AddRange(new ToolStripItem[] { CreateMenuItem(粗体, Keys.Control | Keys.B, FontBold_Click, null) { CheckOnClick true }, CreateMenuItem(斜体, Keys.Control | Keys.I, FontItalic_Click, null) { CheckOnClick true }, CreateMenuItem(下划线, Keys.Control | Keys.U, FontUnderline_Click, null) { CheckOnClick true } }); formatMenu.DropDownItems.Add(fontMenu); formatMenu.DropDownItems.Add(new ToolStripSeparator()); ToolStripMenuItem colorMenu new ToolStripMenuItem(颜色); colorMenu.DropDownItems.AddRange(new ToolStripItem[] { CreateMenuItem(红色, null, ColorRed_Click, null), CreateMenuItem(蓝色, null, ColorBlue_Click, null), CreateMenuItem(黑色, null, ColorBlack_Click, null) }); formatMenu.DropDownItems.Add(colorMenu); // 添加到主菜单 mainMenu.Items.AddRange(new ToolStripItem[] { fileMenu, editMenu, formatMenu }); // 添加到窗体 this.MainMenuStrip mainMenu; this.Controls.Add(mainMenu); } private ToolStripMenuItem CreateMenuItem(string text, Keys shortcutKeys, EventHandler clickHandler, Image image) { ToolStripMenuItem item new ToolStripMenuItem(text); if (shortcutKeys ! Keys.None) item.ShortcutKeys shortcutKeys; if (clickHandler ! null) item.Click clickHandler; if (image ! null) item.Image image; return item; } // 事件处理 private void FontBold_Click(object sender, EventArgs e) { ToolStripMenuItem item sender as ToolStripMenuItem; FontStyle style richTextBox.SelectionFont.Style; if (item.Checked) style | FontStyle.Bold; else style ~FontStyle.Bold; richTextBox.SelectionFont new Font(richTextBox.SelectionFont, style); } }7. 高级技巧// 合并菜单如 MDI 应用程序 private void MergeMenus(ToolStrip toolStrip1, ToolStrip toolStrip2) { ToolStripManager.Merge(toolStrip1, toolStrip2); } // 自定义渲染 mainMenu.Renderer new CustomMenuRenderer(); class CustomMenuRenderer : ToolStripProfessionalRenderer { protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { if (e.Item.Selected) { e.Graphics.FillRectangle(Brushes.LightBlue, e.Item.ContentRectangle); } else { base.OnRenderMenuItemBackground(e); } } } // 国际化支持 private void SwitchLanguage(string culture) { Thread.CurrentThread.CurrentUICulture new CultureInfo(culture); fileMenu.Text Resources.FileMenuText; newItem.Text Resources.NewMenuText; // 更新所有菜单项文本 }这些是ToolStripMenuItem的主要用法掌握这些可以创建功能完善的菜单系统。