【愚公系列】2023年11月 Winform控件专题 MenuStrip控件详解

2025-12-30 09:36:20 避难所建设

🏆 作者简介,愚公搬代码

🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。

🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。

🚀一、MenuStrip控件详解MenuStrip控件是Winform中的菜单控件,可以用于创建菜单栏和下拉菜单。它是一个容器控件,可以在其上添加MenuStripItem子控件,每个子控件可以表示一个菜单项或下拉菜单。

在Visual Studio中使用MenuStrip控件非常简单,只需要在窗体设计器中拖拽一个MenuStrip控件到窗体上即可。然后在MenuStrip控件上右键,选择“添加项”即可添加子控件,可以选择菜单项、下拉菜单等。

对于MenuStrip控件的事件处理,可以通过在设计器中双击相应的子控件来添加事件处理方法,或者在代码中使用事件处理程序来处理相应的事件。

例子:

代码语言:c#复制private void menuItem_Click(object sender, EventArgs e)

{

// 处理菜单项点击事件

}

private void dropdownMenuItem_Click(object sender, EventArgs e)

{

// 处理下拉菜单项点击事件

}

// 添加菜单项和下拉菜单项

private void Form1_Load()

{

// 添加菜单项

ToolStripMenuItem menuItem = new ToolStripMenuItem("菜单项");

menuItem.Click += new EventHandler(menuItem_Click);

menuStrip1.Items.Add(menuItem);

// 添加下拉菜单

ToolStripMenuItem dropdownMenuItem = new ToolStripMenuItem("下拉菜单");

dropdownMenuItem.DropDownItems.Add("子菜单项1");

dropdownMenuItem.DropDownItems.Add("子菜单项2");

dropdownMenuItem.DropDownItems.Add("子菜单项3");

dropdownMenuItem.DropDownItemClicked += new ToolStripItemClickedEventHandler(dropdownMenuItem_Click);

menuStrip1.Items.Add(dropdownMenuItem);

}在这里插入图片描述🔎1.属性介绍🦋1.1 AllowItemReorder、AllowMergeMenuStrip控件的AllowItemReorder属性和AllowMerge属性可以用来控制菜单项的拖拽排序和合并功能。

AllowItemReorder属性允许用户通过拖拽菜单项来重新排列它们的位置。当设置为true时,用户可以拖拽菜单项来改变它们的位置。当设置为false时,则不能拖拽菜单项。

AllowMerge属性允许菜单栏合并。当MenuStrip控件设置为false时,它所包含的菜单项不会和其他菜单栏进行合并。当MenuStrip控件设置为true时,它所包含的菜单项可以和其他MenuStrip控件的菜单栏进行合并,达到共用菜单项的效果。

使用这两个属性很简单,只需要在设计器中选中相应的MenuStrip控件,然后在属性窗口中设置它们的值即可。

也可以在代码中进行设置,例如:

代码语言:c#复制menuStrip1.AllowItemReorder = true; // 允许菜单项拖拽排序

menuStrip1.AllowMerge = true; // 允许菜单栏合并需要注意的是,AllowItemReorder和AllowMerge属性只有在MenuStrip控件的父容器为Form时有效,对于其他容器控件(如Panel等),这两个属性不起作用。

🦋1.2 GripMargin、GripStyleMenuStrip控件是Winform中常用的菜单控件,其中包含了GripMargin和GripStyle两个属性。

GripMargin属性是用来设置MenuStrip控件的边界宽度,默认为2个像素。可以通过设置GripMargin属性来改变MenuStrip控件的边界宽度,从而使其更加美观。

GripStyle属性是用来设置MenuStrip控件的显示样式,默认为Visible。可以通过设置GripStyle属性来改变MenuStrip控件的显示样式,包括Visible(显示菜单栏的背景色)、Hidden(隐藏菜单栏的背景色)、Disabled(禁用菜单栏的背景色)。如果要隐藏菜单栏的背景色,可以将GripStyle属性设置为Hidden。

下面是一个简单的示例,展示如何设置GripMargin和GripStyle属性:

代码语言:c#复制// 设置GripMargin属性为4个像素

menuStrip1.GripMargin = new Padding(4);

// 设置GripStyle属性为Hidden

menuStrip1.GripStyle = ToolStripGripStyle.Hidden;🦋1.3 ItemsMenuStrip控件是Winform中常用的菜单控件之一,可以方便地创建和管理菜单项。其中,Items属性是MenuStrip控件中一个重要的属性,用于添加、删除和获取菜单项。

添加菜单项可以使用Add方法添加一个菜单项,示例代码如下:

代码语言:c#复制MenuStrip menuStrip1 = new MenuStrip();

ToolStripMenuItem fileToolStripMenuItem = new ToolStripMenuItem();

fileToolStripMenuItem.Name = "fileToolStripMenuItem";

fileToolStripMenuItem.Text = "File";

ToolStripMenuItem newToolStripMenuItem = new ToolStripMenuItem();

newToolStripMenuItem.Name = "newToolStripMenuItem";

newToolStripMenuItem.Text = "New";

fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { newToolStripMenuItem });

menuStrip1.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem });删除菜单项可以使用Remove方法删除一个菜单项,示例代码如下:

代码语言:c#复制MenuStrip menuStrip1 = new MenuStrip();

// 假设已经添加了菜单项

ToolStripMenuItem fileToolStripMenuItem = (ToolStripMenuItem)menuStrip1.Items["fileToolStripMenuItem"];

ToolStripMenuItem newToolStripMenuItem = (ToolStripMenuItem)fileToolStripMenuItem.DropDownItems["newToolStripMenuItem"];

fileToolStripMenuItem.DropDownItems.Remove(newToolStripMenuItem);获取菜单项可以使用索引器或者Find方法获取一个菜单项,示例代码如下:

代码语言:c#复制MenuStrip menuStrip1 = new MenuStrip();

// 假设已经添加了菜单项

ToolStripMenuItem fileToolStripMenuItem = (ToolStripMenuItem)menuStrip1.Items["fileToolStripMenuItem"];

ToolStripMenuItem newToolStripMenuItem = (ToolStripMenuItem)fileToolStripMenuItem.DropDownItems["newToolStripMenuItem"];

// 使用索引器获取菜单项

ToolStripMenuItem item1 = (ToolStripMenuItem)menuStrip1.Items[0];

ToolStripMenuItem item2 = (ToolStripMenuItem)fileToolStripMenuItem.DropDownItems[0];

// 使用Find方法获取菜单项

ToolStripItem[] items = menuStrip1.Items.Find("newToolStripMenuItem", true);

ToolStripMenuItem item3 = (ToolStripMenuItem)items[0];🦋1.4 StretchMenuStrip控件的Stretch属性决定菜单栏是否在父容器中拉伸。

当Stretch属性为true时,菜单栏将会在水平方向拉伸,以充满父容器。

当Stretch属性为false时,菜单栏的宽度与父容器相同,不会进行拉伸。

在使用Stretch属性时,需要注意以下两点:

如果同时设置了Dock属性和Stretch属性,Stretch属性的优先级更高,即菜单栏会先拉伸,然后才会根据Dock属性进行停靠。当菜单栏拉伸后,菜单项的布局也会随之改变。如果希望菜单项在拉伸后依然保持原来的布局,可以将菜单项的属性LayoutStyle设置为HorizontalStackWithOverflow。这样,在菜单栏空间不足时,菜单项会自动进入“溢出”菜单,保持原来的布局。🦋1.5 Text、TextDirectionMenuStrip控件是Winform中常用的菜单栏控件,它可以通过添加菜单项来实现各种菜单操作。在使用MenuStrip控件时,常用的属性包括Text和TextDirection属性。

Text属性Text属性用于设置MenuStrip控件的文本内容,即菜单栏上显示的文字。可以通过代码或者属性窗口设置Text属性。

例如,在代码中设置MenuStrip的Text属性:

代码语言:c#复制MenuStrip1.Text = "我的菜单";在属性窗口中设置MenuStrip的Text属性:

选中MenuStrip控件,在属性窗口中找到Text属性,将其修改为相应的文本即可。

TextDirection属性TextDirection属性用于设置MenuStrip控件中菜单项的文本方向,包括LeftToRight和RightToLeft两种方式,默认是LeftToRight方式。

例如,将MenuStrip控件的TextDirection属性设置为RightToLeft方式:

在代码中设置:

代码语言:c#复制MenuStrip1.TextDirection = System.Windows.Forms.ToolStripTextDirection.RightToLeft;在属性窗口中设置:

选中MenuStrip控件,在属性窗口中找到TextDirection属性,将其修改为RightToLeft即可。

🔎2.常用场景MenuStrip控件是Winform中常用的菜单控件,常用场景如下:

应用程序主菜单:MenuStrip可以作为应用程序的主菜单,在窗体顶部添加一个水平的菜单栏,用于展示应用程序的主要功能和模块。窗体右键菜单:MenuStrip可以作为窗体或控件的右键菜单,在鼠标右键点击时弹出一个下拉菜单,提供相应的功能选项。网站导航栏:MenuStrip可以作为网站导航栏,将菜单项链接到不同的页面,方便用户快速导航到需要的位置。客户端工具栏:MenuStrip可以作为客户端工具栏,提供各种常用的工具和功能按钮。🔎3.具体案例首先,创建一个新的WinForms项目。接下来,将一个MenuStrip控件(MenuStrip1)拖放到窗体(Form1)上。

然后,使用以下代码在MenuStrip中动态添加菜单项,并处理菜单项的点击事件:

代码语言:c#复制using System;

using System.Windows.Forms;

namespace WinFormsMenuExample

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

InitializeMenu();

}

private void InitializeMenu()

{

// 创建顶级菜单项

ToolStripMenuItem fileMenu = new ToolStripMenuItem("文件");

ToolStripMenuItem editMenu = new ToolStripMenuItem("编辑");

// 添加子菜单项到文件菜单

fileMenu.DropDownItems.Add("新建", null, NewFile);

fileMenu.DropDownItems.Add("打开", null, OpenFile);

fileMenu.DropDownItems.Add("保存", null, SaveFile);

fileMenu.DropDownItems.Add("退出", null, Exit);

// 添加子菜单项到编辑菜单

editMenu.DropDownItems.Add("复制", null, Copy);

editMenu.DropDownItems.Add("剪切", null, Cut);

editMenu.DropDownItems.Add("粘贴", null, Paste);

// 将菜单项添加到MenuStrip

menuStrip1.Items.Add(fileMenu);

menuStrip1.Items.Add(editMenu);

// 将MenuStrip与窗体关联

this.Controls.Add(menuStrip1);

this.MainMenuStrip = menuStrip1;

}

// 事件处理方法示例

private void NewFile(object sender, EventArgs e)

{

MessageBox.Show("新建文件");

}

private void OpenFile(object sender, EventArgs e)

{

MessageBox.Show("打开文件");

}

private void SaveFile(object sender, EventArgs e)

{

MessageBox.Show("保存文件");

}

private void Exit(object sender, EventArgs e)

{

Application.Exit();

}

private void Copy(object sender, EventArgs e)

{

MessageBox.Show("复制");

}

private void Cut(object sender, EventArgs e)

{

MessageBox.Show("剪切");

}

private void Paste(object sender, EventArgs e)

{

MessageBox.Show("粘贴");

}

}

}上述代码中,我们首先在窗体的构造函数中调用了InitializeMenu方法,该方法负责动态创建菜单项并添加到MenuStrip中。然后,我们定义了一系列事件处理方法(例如NewFile、OpenFile等),它们将在相应的菜单项被点击时执行。

在这里插入图片描述我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

最新发表
友情链接