8.3.1 MenuStrip(菜单)控件

news2025/4/12 13:55:25

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

MenuStrip控件提供了程序窗体的主菜单,即显示于窗体顶端部分的菜单。

MenuStrip常用属性:

  1. ImageScalingSize:菜单上所用图像的大小(单位:像素),默认为(16,16)。注意:如果修改了此值,在窗体编辑模式下还是显示为(16,16),不会立即显示为设置的大小,可以关闭窗体再打开。

【例 8.45【项目:code8-045】在窗体上建立菜单。

双击添加MenuStrip控件,它会显示在编辑器底部,窗体上部显示菜单区域,并且显示灰色的“请在此处键入”:

图8-62 菜单显示的位置

在“请在此处键入”后部有一个向下的小箭头,单击小箭头可以设置每个菜单项类型:

MenuItem:常规的菜单项。

  1. ComboBox: 对应ToolStripComboBox类型,组合框,类似于普通的ComboBox。
  2. TextBox:对应ToolStripTextBox类型,文本框,类似于普通的TextBox。
  3. Separator:分隔符,在菜单中显示为一横线。

请根据实际需要选择相应的菜单项类型。

在“请在此处键入”位置单击进入文本编辑模式,输入“文件(&F)”,其中“&+字母”用来建立该菜单的快捷键,例如“&F”即快捷键为“ALT+F”,此时可以继续单击右边或者下方“请在此处键入”继续添加菜单或子菜单:

图8-63 在已建菜单项右边或者下方继续添加菜单项

继续建立“文件F”的子菜单:“打开(&O)”、“保存(&S)”、“-”、“关闭(&X)”,以及主菜单项“编辑(&E)”、“视图(&V)”。

在子菜单中可以使用“-”(减号)在菜单中增加一个分隔栏。但是横向的主菜单中不允许使用分隔栏。

如果某个菜单项建立错误,可以直接单击后进行编辑,也可以选中错误的菜单项,按下键盘“DEL”按键删除。

当输入菜单(包括子菜单)项名称后,C#会自动建立一个ToolStripMenuItem类,默认使用“菜单文本”+“ToolStripMenuItem”来命名。例如菜单项“文件F”对应名称“文件FToolStripMenuItem”,单击“文件F”,C#编辑器右侧【属性】窗口将显示“文件FToolStripMenuItem”的属性。

ToolStripMenuItem类的常用属性:

  1. Image:显示在菜单文本前面的图标。
  2. CheckOnClick:是否该菜单项被单击时在名称前面显示选中或未选中。如果设置了Image属性时,此属性即使为True也不会显示。
  3. Checked:设置是否被选中。
  4. Visible:是否可见。

选中菜单项“打开O”(打开OToolStripMenuItem),将【属性】窗口中Image属性添加一张图片。注意:默认没有*.Ico,但是实际上是可以使用图标文件的。

选中菜单项“保存S”(保存SToolStripMenuItem),将【属性】窗口中的CheckOnClick属性设置为True,运行时,此菜单项被单击时将会自动显示为选中或未选中。

图8-64 带图标和选择框的菜单项

当需要给某个菜单项添加事件时,直接双击该菜单项,进入此菜单项的事件代码编辑,默认事件是 Click。例如双击“打开O”菜单项添加Click事件代码:

        private void 打开OToolStripMenuItem_Click(object sender, EventArgs e)

        {

            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)

                MessageBox.Show(ofd.FileName);

        }

由于C#提供给菜单项CheckOnClick属性显示选中或未选中并不好看,可以考虑替换为更漂亮的图片。为菜单项“保存S” (保存SToolStripMenuItem)Image属性选择一张类似“X”的图片(x.png)表示未选中,同时准备一张类似“√”的图片(r.png)表示选中,修改“保存S”的Click事件代码:

       private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)

        {

            //将sender转换为ToolStripMenuItem,并赋值给定义的ToolStripMenuItem

            ToolStripMenuItem menuSave = (ToolStripMenuItem)sender;

            //当菜单项没有选中,该菜单项图标为x.png,否则为r.png

            if (menuSave.Checked == false)

                    menuSave.Image = Image.FromFile("c:\\lessons\\x.png");

            else

                menuSave.Image = Image.FromFile("c:\\lessons\\r.png");       

        }

运行结果如下图所示:

图8-65 当“保存S”被选中时显示为“X”图片

【例 8.46【项目:code8-046】通过代码在窗体上建立菜单。

增加菜单项及其对应事件的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            //定义msMain为MenuStrip类型

            MenuStrip msMain = new MenuStrip();

            //定义tsmiFile为ToolStripMenuItem类型

            ToolStripMenuItem tsmiFile = new ToolStripMenuItem();

            //设置菜单项显示的文本

            tsmiFile.Text = "文件(&F)";

            //定义tsmiFileOpen为ToolStripMenuItem类型

            ToolStripMenuItem tsmiFileOpen = new ToolStripMenuItem();

            //设置菜单项显示的文本

            tsmiFileOpen.Text = "打开(&O)";

            //定义tsmiFileSave为ToolStripMenuItem类型

            ToolStripMenuItem tsmiFileSave = new ToolStripMenuItem();

            tsmiFileSave.Text = "保存(&S)";

            //此菜单项显示的图标

            tsmiFileSave.Image = Image.FromFile("c:\\lessons\\x.png");

            //此菜单项可以被选中或未选中

            tsmiFileSave.CheckOnClick = true;

            //此菜单项当前未选中

            tsmiFileSave.Checked = false;

            //将tsmiFileOpen和tsmiFileSave加入tsmiFile下拉菜单项

            tsmiFile.DropDownItems.Add(tsmiFileOpen);

            tsmiFile.DropDownItems.Add(tsmiFileSave);

            //将tsmiFile加入msMain菜单项

            msMain.Items.Add(tsmiFile);

            //将msMain加入窗体控件中,不用像其它控件一样指定位置

            this.Controls.Add(msMain);

            //将tsmiFileOpen菜单项的Click事件和mnuFileOpen_Click方法关联

            tsmiFileOpen.Click += mnuFileOpen_Click;

            //将tsmiFileSave菜单项的Click事件和mnuFileSave_Click方法关联

            tsmiFileSave.Click += mnuFileSave_Click;

        }

关联的方法:

        //实际处理tsmiFileOpen.Click事件

        private void mnuFileOpen_Click(Object sender  , EventArgs e  )

        {

            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)

                MessageBox.Show(ofd.FileName);       

        }

       

        //实际处理tsmiFileSave.Click事件

        private void mnuFileSave_Click(Object sender, EventArgs e)     //

        {

            ToolStripMenuItem menuSave = (ToolStripMenuItem)sender;

            if (menuSave.Checked)

                menuSave.Image = Image.FromFile("c:\\lessons\\r.png");

            else

                menuSave.Image = Image.FromFile("c:\\lessons\\x.png");

        }

运行结果如下图所示:

图8-66 运行时增加菜单项

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32单片机入门学习——第29节: [9-5] 串口收发HEX数据包串口收发文本数据包

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.09 STM32开发板学习——第29节: [9-5] 串口收发HEX数据包&串口收发文本数据包 前…

Skyline配置指南-微信小程序

Skyline 是微信小程序推出的新一代渲染引擎,提供了更强大的渲染能力和更流畅的性能体验。以下是配置 Skyline 的详细步骤: 一、app.json文件配置 "componentFramework": "glass-easel", "lazyCodeLoading": "requi…

Spring MVC 重定向(Redirect)详解

Spring MVC 重定向(Redirect)详解 1. 核心概念与作用 重定向(Redirect) 是 Spring MVC 中一种客户端重定向机制,通过 HTTP 302 状态码(默认)将用户浏览器重定向到指定 URL。 主要用途&#xf…

window上 docker使用ros2开发并usbip共享usb设备

曾经参考 https://blog.csdn.net/laoxue123456/article/details/138339029 来共享windows上的usb 发现没有办法成功总是出现 tcp 错误。telnet测试能够正常连接 很是奇怪,window上换成低版本的usbipd仍然是同样的错误,没有办法的情况下参考了docker官方文…

基于MATLAB/simulink的信号调制仿真--AM调制

实验内容: 假设y(t)(20.5*2cos(2*pi*1000*t))*5cos(2*pi*2*1e4*t)调幅系统,请将一个频率为1000HZ的余弦波信号,通过进行AM调制,载波信号频率为20kHZ的余弦波,调制度ma0.…

Vue3+Ts封装ToolTip组件(2.0版本)

本组件支持hover和click两种触发方式,需要更多的触发方式,可自行去扩展!!! 1.传递三个参数: content:要展示的文本 position:文本出现的位置("top" | "t…

Latex语法入门之数学公式

Latex是一种高质量的排版系统,尤其擅长于数学公式的排版。本文我将带大家深入了解Latex在数学公式排版中的应用。从基础的数学符号到复杂的公式布局,我们都会一一讲解,通过本文的学习,你将能够轻松编写出清晰、美观的数学公式&…

shell脚本 - Linux定时温度监控-软硬件检测 - 服务器温度监控 - 写入日志

效果图 脚本 vi auto.sh (chmod x ./auto.sh) #!/bin/bash # 按照日期创建一个文件或目录 https://blog.csdn.net/shoajun_5243/article/details/83539069 datetimedate %Y%m%d-%H%M%S |cut -b1-20 dirpath/systemMonitor/$datetime file1$dirpath/sensors.log file2$dirpa…

Linux驱动开发进阶(六)- 多线程与并发

文章目录 1、前言2、进程与线程3、内核线程4、底半步机制4.1、软中断4.2、tasklet4.3、工作队列4.3.1、普通工作项4.3.2、延时工作项4.3.3、工作队列 5、中断线程化6、进程6.1、内核进程6.2、用户空间进程 7、锁机制7.1、原子操作7.2、自旋锁7.3、信号量7.4、互斥锁7.5、comple…

买不起了,iPhone 或涨价 40% ?

周知的原因,新关税对 iPhone 的打击,可以说非常严重。 根据 Rosenblatt Securities分析师的预测,若苹果完全把成本转移给消费者。 iPhone 16 标配版的价格,可能上涨43%。 iPhone 16 标配的价格是799美元,上涨43%&am…

Axure 列表滚动:表头非常多(横向滚动方向)、分页(纵向滚动) | 基于动态面板的滚动方向和取消调整大小以适合内容两个属性进行实现

文章目录 引言I 列表滚动的操作说明see also共享原型引言 Axure RP9教程 【数据传输】(页面值传递)| 作用域 :全局变量、局部变量 https://blog.csdn.net/z929118967/article/details/147019839?spm=1001.2014.3001.5501 基于动态面板的滚动方向和取消调整大小以适合内容两…

RBAC 权限控制:深入到按钮级别的实现

RBAC 权限控制:深入到按钮级别的实现 一、前端核心思路 1. 大致实现思路 后端都过SELECT连表查询把当前登录的用户对应所有的权限返回过来,前端把用户对应所有的权限 存起来to(vuex/pinia) 中 ,接着前端工程师需要知道每个按钮对应的权限代…

【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;贪心算法 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 合并区间无重叠区间用最少数量的箭引爆气球俄罗斯套娃信封问题 合并区间 合并区间 class Solution { public:vector<vecto…

es --- 集群数据迁移

目录 1、需求2、工具elasticdump2.1 mac安装问题解决 2.2 elasticdump文档 3、迁移 1、需求 迁移部分新集群没有的索引和数据 2、工具elasticdump Elasticdump 的工作原理是将输入发送到输出 。两者都可以是 elasticsearch URL 或 File 2.1 mac安装 前置&#xff1a;已经安装…

【有啥问啥】深入浅出讲解 Teacher Forcing 技术

深入浅出讲解 Teacher Forcing 技术 在序列生成任务&#xff08;例如机器翻译、文本摘要、图像字幕生成等&#xff09;中&#xff0c;循环神经网络&#xff08;RNN&#xff09;以及基于 Transformer 的模型通常采用自回归&#xff08;autoregressive&#xff09;的方式生成输出…

zk基础—zk实现分布式功能

1.zk实现数据发布订阅 (1)发布订阅系统一般有推模式和拉模式 推模式&#xff1a;服务端主动将更新的数据发送给所有订阅的客户端。 拉模式&#xff1a;客户端主动发起请求来获取最新数据(定时轮询拉取)。 (2)zk采用了推拉相结合来实现发布订阅 首先客户端需要向服务端注册自己关…

ubuntu wifi配置(命令行版本)

1、查询当前设备环境的wifi列表 nmcli dev wifi list2、连接wifi nmcli dev wifi connect "MiFi-SSID" password "Password" #其中MiFi-SSID是wifi的密码&#xff0c;Password是wifi的密码3、查看连接情况 nmcli dev status

Docker与Kubernetes在ZKmall开源商城容器化部署中的应用

ZKmall开源商城作为高并发电商系统&#xff0c;其容器化部署基于DockerKubernetes技术栈&#xff0c;实现了从开发到生产环境的全流程标准化与自动化。以下是核心应用场景与技术实现&#xff1a; 一、容器化基础&#xff1a;Docker镜像与微服务隔离 ​服务镜像标准化 ​分层构建…

华为AI-agent新作:使用自然语言生成工作流

论文标题 WorkTeam: Constructing Workflows from Natural Language with Multi-Agents 论文地址 https://arxiv.org/pdf/2503.22473 作者背景 华为&#xff0c;北京大学 动机 当下AI-agent产品百花齐放&#xff0c;尽管有ReAct、MCP等框架帮助大模型调用工具&#xff0…

MYSQL数据库语法补充

一&#xff0c;DQL基础查询 DQL&#xff08;Data Query Language&#xff09;数据查询语言&#xff0c;可以单表查询&#xff0c;也可以多表查询 语法&#xff1a; select 查询结果 from 表名 where 条件&#xff1b; 特点&#xff1a; 查询结果可以是&#xff1a;表中的字段…