首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
【愚公系列】2023年11月 WPF控件专题 Line控件详解
2
【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题
3
【愚公系列】2023年11月 Winform控件专题 Label控件详解
4
【愚公系列】2023年11月 Winform控件专题 Button控件详解
5
【愚公系列】2023年11月 Winform控件专题 Form控件详解
6
【愚公系列】2023年11月 Winform控件专题 TextBox控件详解
7
【愚公系列】2023年11月 Winform控件专题 CheckBox控件详解
8
【愚公系列】2023年11月 Winform控件专题 RadioButton控件详解
9
【愚公系列】2023年11月 Winform控件专题 ComboBox控件详解
10
【愚公系列】2023年11月 Winform控件专题 RichTextBox控件详解
11
【愚公系列】2023年11月 Winform控件专题 ListBox控件详解
12
【愚公系列】2023年11月 Winform控件专题 CheckedListBox控件详解
13
【愚公系列】2023年11月 Winform控件专题 numericUpDown控件详解
14
【愚公系列】2023年11月 Winform控件专题 LinkLabel控件详解
15
【愚公系列】2023年11月 Winform控件专题 DateTimePicker控件详解
16
【愚公系列】2023年11月 Winform控件专题 NotifyIcon控件详解
17
【愚公系列】2023年11月 Winform控件专题 ContextMenuStrip控件详解
18
【愚公系列】2023年11月 Winform控件专题 Timer控件详解
19
【愚公系列】2023年11月 Winform控件专题 PictureBox控件详解
20
【愚公系列】2023年11月 Winform控件专题 Chart控件详解
21
【愚公系列】2023年11月 Winform控件专题 DataGridView控件详解
22
【愚公系列】2023年11月 Winform控件专题 TableLayoutPanel控件详解
23
【愚公系列】2023年11月 Winform控件专题 ProgressBar控件详解
24
【愚公系列】2023年11月 Winform控件专题 Panel控件详解
25
【愚公系列】2023年11月 Winform控件专题 FlowLayoutPanel控件详解
26
【愚公系列】2023年11月 Winform控件专题 GroupBox控件详解
27
【愚公系列】2023年11月 Winform控件专题 SplitContainer控件详解
28
【愚公系列】2023年11月 Winform控件专题 TabControl控件详解
29
【愚公系列】2023年11月 Winform控件专题 ToolTip控件详解
30
【愚公系列】2023年11月 Winform控件专题 MaskedTextBox控件详解
31
【愚公系列】2023年11月 Winform控件专题 MonthCalendar控件详解
32
【愚公系列】2023年11月 Winform控件专题 TreeView控件详解
33
【愚公系列】2023年11月 Winform控件专题 MenuStrip控件详解
34
【愚公系列】2023年11月 Winform控件专题 OpenFileDialog控件详解
35
【愚公系列】2023年11月 Winform控件专题 SaveFileDialog控件详解
36
【愚公系列】2023年12月 Winform控件专题 FontDialog控件详解
37
【愚公系列】2023年12月 Winform控件专题 ColorDialog控件详解
38
【愚公系列】2023年12月 Winform控件专题 FolderBrowserDialog控件详解
39
【愚公系列】2023年12月 Winform控件专题 StatusStrip控件详解
40
【愚公系列】2023年12月 Winform控件专题 ToolStrip控件详解
41
【愚公系列】2023年12月 Winform控件专题 HelpProvider控件详解
42
【愚公系列】2023年12月 Winform控件专题 ToolStripContainer控件详解
43
【愚公系列】2023年12月 Winform控件专题 BackgroundWorker控件详解
44
【愚公系列】2023年12月 GDI+绘图专题 图形图像编程基础
45
【愚公系列】2023年12月 GDI+绘图专题 图形图像的重绘
46
【愚公系列】2023年12月 GDI+绘图专题 颜色获取和图形绘制
47
【愚公系列】2023年12月 GDI+绘图专题 Point
48
【愚公系列】2023年12月 GDI+绘图专题 Rectangle
49
【愚公系列】2023年12月 GDI+绘图专题 Matrix
50
【愚公系列】2023年12月 GDI+绘图专题 Pen

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

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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、AllowMerge

MenuStrip控件的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、GripStyle

MenuStrip控件是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 Items

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

  1. 添加菜单项

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

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

代码语言:c#
复制
MenuStrip menuStrip1 = new MenuStrip();
// 假设已经添加了菜单项
ToolStripMenuItem fileToolStripMenuItem = (ToolStripMenuItem)menuStrip1.Items["fileToolStripMenuItem"];
ToolStripMenuItem newToolStripMenuItem = (ToolStripMenuItem)fileToolStripMenuItem.DropDownItems["newToolStripMenuItem"];
fileToolStripMenuItem.DropDownItems.Remove(newToolStripMenuItem);
  1. 获取菜单项

可以使用索引器或者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 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属性:

代码语言:c#
复制
MenuStrip1.Text = "我的菜单";

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

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

  1. TextDirection属性

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

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

在代码中设置:

代码语言:c#
复制
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中动态添加菜单项,并处理菜单项的点击事件:

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

在这里插入图片描述

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

下一篇
举报
领券