C# winforms 使用菜单和右键菜单

news2024/11/14 23:16:50

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        本文将指导你使用菜单和右键菜单以及给菜单项设置选中标记。

目录

一、添加菜单

二、设置菜单项选中状态

三、合理处理菜单组和选中状态

四、添加右键菜单


一、添加菜单

        在工具栏找到MenuStrip,放到窗口就可以了:

        然后就是编辑菜单项,给每个菜单项设置属性,最重要的是“(Name)” ,这个是菜单项的ID。双击菜单项就会自动添加事件处理程序。

        事件处理程序一般是:

private void 菜单项ID_Click(object sender, EventArgs e)
{
}

        这部分应该很简单了。

二、设置菜单项选中状态

        有时候一组菜单是一组选项,会影响后续操作,也需要回头查看之前选的是哪个菜单,这种情形最好设置一下菜单的选中状态,例如下面这个菜单:

        这种用法很常见吧。实现起来也很简单:

			菜单项ID.Checked = true;

三、合理处理菜单组和选中状态

        设置选中状态很简单,在菜单处理程序里面一句话就能搞定,但是别的菜单项不需要取消选中状态吗?所以这里面就要懂一点脑子,把代码写得合理一点。

  • 定义一个枚举,对应每个菜单项
  • 定义一个变量,记录当前选择的菜单项
  • 在每个菜单处理程序里设置变量,然后更新所有菜单的状态(显然应该写成一个独立方法)
  • 在其他地方根据变量值来分别处理

        代码示例:

//定义枚举和枚举变量	
    	private enum SHOW_TYPE { ALL, NEW, CONFIGED, SELECTED }
		private SHOW_TYPE current_show_type = SHOW_TYPE.ALL;

//更新全部菜单项
		private void UpdateMenuShowType()
		{
			this.menu_show_all.Checked = current_show_type == SHOW_TYPE.ALL;
			this.menu_show_new.Checked = current_show_type == SHOW_TYPE.NEW;
			this.menu_show_configed.Checked = current_show_type == SHOW_TYPE.CONFIGED;
			this.menu_show_selected.Checked = current_show_type == SHOW_TYPE.SELECTED;
		}
//每个菜单的处理程序
		private void menu_show_all_Click(object sender, EventArgs e)
		{
			current_show_type = SHOW_TYPE.ALL;
			UpdateMenuShowType();
		}
		private void menu_show_new_Click(object sender, EventArgs e)
		{
			current_show_type = SHOW_TYPE.NEW;
			UpdateMenuShowType();
		}

		private void menu_show_configed_Click(object sender, EventArgs e)
		{
			current_show_type = SHOW_TYPE.CONFIGED;
			UpdateMenuShowType();
		}
		private void menu_show_selected_Click(object sender, EventArgs e)
		{
			current_show_type = SHOW_TYPE.SELECTED;
			UpdateMenuShowType();
		}

//其他代码,根据变量值分别处理
		private void refesh_right_Click()
		{
			if (current_show_type == SHOW_TYPE.SELECTED)
			{
				。。。。。。
			}
			else if (current_show_type == SHOW_TYPE.CONFIGED)
			{
				。。。。。。
			}
		}

四、添加右键菜单

        右键菜单是另一个控件:ContextMenuStrip,编辑菜单的操作和窗口菜单并没有什么区别。

        右键菜单和窗口的菜单的主要区别是右键菜单需要在和合适的位置弹出,因此多用代码来实现。处理窗口或控件的鼠标事件,根据鼠标位置弹出指定的右键菜单。

        例如在列表视图里仅当鼠标位于有效行之上的时候弹出,空白位置不弹出:

		private void listView_MouseClick(object sender, MouseEventArgs e)
		{
			ListView listView = (ListView)sender;
			ListViewItem? item = listView.GetItemAt(e.X, e.Y);
			if (item != null && e.Button == MouseButtons.Right)
			{
				contextMenuStrip_1.Show(listView, e.X, e.Y);
			}
		}

        用来显示右键菜单的仅仅是右键菜单对象的Show方法而已,参数也很简单:父窗口/控件,鼠标位置,在这里参数都是直接来自鼠标事件的参数的。


(这里是文档结束)

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

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

相关文章

C语言课程设计题目一:职工信息管理系统设计

文章目录 题目一:职工信息管理系统设计代码块employeeManagement.hemployeeManage.ctest.c 调试验证录入信息,并浏览验证职工号唯一保存职工信息,加载职工信息按职工号进行查询根据id删除职工修改职工信息 题目一:职工信息管理系统…

国家首次向全社会提供永久基本农田查询服务

自然资源部永久基本农田查询平台正式上线。 据悉,这是国家首次向全社会提供永久基本农田查询服务。 如何查询永久基本农田信息 永久基本农田查询平台正式上线,是对永久基本农田依法实施特殊保护的重要举措,是对各地已开展的永久基本农田公…

分割掩码标注转YOLO多边形标注

Ultralytics 团队付出了巨大的努力,使创建自定义 YOLO 模型变得非常容易。但是,处理大型数据集仍然很痛苦。训练 yolo 分割模型需要数据集具有其特定格式,这可能与你从大型数据集中获得的格式不完全相同。如果你想使用巨大的 OpenImagesV7 作…

MIPI包分析

如下图所示,长方形圈出来的是数据包的规定区域,注意SOT不在packet的定义区间。 分析可知,第一byte就知道包的类型,姑且记作VC2DT6。DT6就是6bits的data type。显而易见总共定义了64中类型,规范中定义了一些&#xff0…

【C++掌中宝】C++ 中的空指针救世主——nullptr

文章目录 1. 什么是 NULL?2. NULL 在 C 和 C 中的区别3. C11 引入 nullptr 的原因4. nullptr 与 NULL 的区别5. nullptr 的应用场景6. 模拟 nullptr 的实现7. 总结结语 1. 什么是 NULL? 在 C 和 C 编程中,NULL 常用于表示空指针,…

展示中国客车硬实力!苏州金龙海格纯电客车惊艳汉诺威商用车展

德国当地时间2024年9月22日,IAA汉诺威商用车展在德国汉诺威展览中心圆满落幕。本届展会,苏州金龙海格客车携新能源公交明星产品Azure7、斯堪尼亚海格高端巴士Fencer F1 Integral EV纯电车型重磅亮相,获得了众多参会嘉宾的好评和关注。来自欧洲…

【活动】人工智能时代,程序员如何保持核心竞争力?需要掌握哪些技能?

人工智能时代,程序员如何保持核心竞争力? 随着人工智能(AI)技术的迅猛发展,程序员面临着前所未有的挑战和机遇。AI不仅改变了软件开发的方式,也重新定义了程序员的角色。在这种背景下,如何保持…

人工智能助力阿尔茨海默症治疗:微软与上海精神卫生中心的新研究

最近,微软研究院与上海市精神卫生中心合作,基于微软 Azure OpenAI 服务中的多模态大模型,开发了一种名为“忆我”(ReMe)的个性化认知训练框架。这一创新项目旨在通过数字化手段扩展自动化认知训练的范围,为…

2025考研,报名和初试时间定了!

2025年全国硕士研究生招生初试时间为2024年12月21日至22日,考试时长为6小时的考试科目在12月23日举行。 请考生届时登录“中国研究生招生信息网”(网址:https://yz.chsi.com.cn)参加报名,查看报名须知、招生单位招生章…

软考高级:云计算架构的五层 AI 解读

云计算架构通常由多个层次构成,每个层次负责不同的功能,协同工作来提供完整的云服务。下面我将详细解释云计算架构的五个主要层次:管理层、用户访问层、应用层、平台层和资源层。 生活化例子 想象一下,云计算架构就像是一座大型…

从金蝶云星空到管易云通过接口配置打通数据

从金蝶云星空到管易云通过接口配置打通数据 接通系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。K/3Cloud支持…

yolov8环境安装

yolov8 git地址 https://github.com/ultralytics/ultralytics/tree/main 我的电脑显卡配置 nvidia-smi cuda11.8下载 https://developer.nvidia.com/cuda-11-8-0-download-archive?target_osWindows&target_archx86_64&target_version10&target_typeexe_local …

保姆级教程!0基础小白也适用,教你用AI美女在小红书“疯狂上分”

文章开始之前,先考考各位小伙伴的眼力:下面的图是真人还是 AI,你能分辨出来吗? 答案是:AI,AI,全是使用stable diffusion生成的AI美女! 说实话,最近AI美女是彻底杀疯了&a…

大数据Hive组件安装

组件版本 组件版本Hadoop3.3.0JDK1.8.0_241Mysql5.7.25Hive3.1.2 Hadoop集群服务分布 Node1Node2Node3NameNode DataNode DataNodeDataNode NodeManager NodeManagerResourceManagerSecondaryNameNode 安装前请确定Hadoop集群服务全部启动,不然后续测试时会报…

【学习笔记】手写 Tomcat 四

目录 一、Read 方法返回 -1 的问题 二、JDBC 优化 1. 创建配置文件 2. 创建工具类 3. 简化 JDBC 的步骤 三、修改密码 优化返回数据 创建修改密码的页面 注意 测试 四、优化响应动态资源 1. 创建 LoginServlet 类 2. 把登录功能的代码放到 LoginServlet 类 3. 创…

企业新购买的设备需要做仪器校准吗?为什么新设备也要做检测?

企业在定制一批设备仪器到厂后,会需要对设备进行验货和接收,而这个环节很多人对于设备是否同时需要先做校准的问题犹豫不决,一些企业觉得新设备都是刚买的,做仪器校准没有必要,但是另一部分认为即便是新买的仪器也要先…

easyexcel常见问题分析

文章目录 一、读取数字多了很多小数位的精度问题 一、读取数字多了很多小数位的精度问题 浮点型转成BigDecimal的时候会出现精度问题,例如 这儿设置的实体类对象类型是String,默认用到的是StringNumberConverter转换器 2.1.4 版本 public class Strin…

葡萄城亮相2024全球产品经理大会,共探创新之旅

葡萄城亮相2024全球产品经理大会,共探创新之旅 9 月 20-21 日,由 CSDN 举办的“2024 全球产品经理大会”于北京盛大开幕,现场超 40 位互联网与科技产品领域专业人士发表主题演讲,1000 与会者齐聚一堂。 大会现场气氛热烈&#…

【LangChain系列】实战案例5:用LangChain实现灵活的Agents+RAG,该查时查,不该查时就别查

目前为止,我们实现的RAG练习中,答案都是全部来源于检索到的文本内容。而检索过程可能在某些情况下是不需要的。 如何优化这个过程,让我们的RAG程序在必要时才去检索,不必要时,直接使用大模型原有数据来回答呢&#xf…

Python酷玩之旅_如何在Centos8顺利安装Python最新版(3.12)

全文导览 前言Q:如何在Centos8顺利安装Python最新版一. 下载安装包1.1 wget1.2. 官网下载 二. 执行安装2.1. 检查环境2.2. 安装依赖2.3. 解压tgz包2.4. 编译2.5. 安装2.6. 设置环境变量2.6.1 编辑/etc/profile2.6.2 激活生效 三. 操作示例3.1. helloworld 结语 前言…