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

举报
愚公搬代码 发表于 2023/11/26 23:27:11 2023/11/26
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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控件的事件处理,可以通过在设计器中双击相应的子控件来添加事件处理方法,或者在代码中使用事件处理程序来处理相应的事件。

例子:

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、AllowMerge

MenuStrip控件的AllowItemReorder属性和AllowMerge属性可以用来控制菜单项的拖拽排序和合并功能。

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

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

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

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

menuStrip1.AllowItemReorder = true; // 允许菜单项拖拽排序
menuStrip1.AllowMerge = true; // 允许菜单栏合并

需要注意的是,AllowItemReorder和AllowMerge属性只有在MenuStrip控件的父容器为Form时有效,对于其他容器控件(如Panel等),这两个属性不起作用。

🦋1.2 GripMargin、GripStyle

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

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

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

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

// 设置GripMargin属性为4个像素
menuStrip1.GripMargin = new Padding(4);

// 设置GripStyle属性为Hidden
menuStrip1.GripStyle = ToolStripGripStyle.Hidden;

🦋1.3 Items

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

  1. 添加菜单项

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

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 });
  1. 删除菜单项

可以使用Remove方法删除一个菜单项,示例代码如下:

MenuStrip menuStrip1 = new MenuStrip();
// 假设已经添加了菜单项
ToolStripMenuItem fileToolStripMenuItem = (ToolStripMenuItem)menuStrip1.Items["fileToolStripMenuItem"];
ToolStripMenuItem newToolStripMenuItem = (ToolStripMenuItem)fileToolStripMenuItem.DropDownItems["newToolStripMenuItem"];
fileToolStripMenuItem.DropDownItems.Remove(newToolStripMenuItem);
  1. 获取菜单项

可以使用索引器或者Find方法获取一个菜单项,示例代码如下:

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 Stretch

MenuStrip控件的Stretch属性决定菜单栏是否在父容器中拉伸。

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

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

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

  1. 如果同时设置了Dock属性和Stretch属性,Stretch属性的优先级更高,即菜单栏会先拉伸,然后才会根据Dock属性进行停靠。

  2. 当菜单栏拉伸后,菜单项的布局也会随之改变。如果希望菜单项在拉伸后依然保持原来的布局,可以将菜单项的属性LayoutStyle设置为HorizontalStackWithOverflow。这样,在菜单栏空间不足时,菜单项会自动进入“溢出”菜单,保持原来的布局。

🦋1.5 Text、TextDirection

MenuStrip控件是Winform中常用的菜单栏控件,它可以通过添加菜单项来实现各种菜单操作。在使用MenuStrip控件时,常用的属性包括Text和TextDirection属性。

  1. Text属性

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

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

MenuStrip1.Text = "我的菜单";

在属性窗口中设置MenuStrip的Text属性:

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

  1. TextDirection属性

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

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

在代码中设置:

MenuStrip1.TextDirection = System.Windows.Forms.ToolStripTextDirection.RightToLeft;

在属性窗口中设置:

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

🔎2.常用场景

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

  1. 应用程序主菜单:MenuStrip可以作为应用程序的主菜单,在窗体顶部添加一个水平的菜单栏,用于展示应用程序的主要功能和模块。

  2. 窗体右键菜单:MenuStrip可以作为窗体或控件的右键菜单,在鼠标右键点击时弹出一个下拉菜单,提供相应的功能选项。

  3. 网站导航栏:MenuStrip可以作为网站导航栏,将菜单项链接到不同的页面,方便用户快速导航到需要的位置。

  4. 客户端工具栏:MenuStrip可以作为客户端工具栏,提供各种常用的工具和功能按钮。

🔎3.具体案例

首先,创建一个新的WinForms项目。接下来,将一个MenuStrip控件(MenuStrip1)拖放到窗体(Form1)上。

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

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中。然后,我们定义了一系列事件处理方法(例如NewFileOpenFile等),它们将在相应的菜单项被点击时执行。

在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

![在这里插入图片描述](https://img-blog.csdnimg.cn/e06a317e89694a23ad89d2c59538c3a1.jpeg#pic_center =450x300)

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。