当前位置: 首页 > news >正文

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

初级代码游戏的专栏介绍与文章目录-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.lryc.cn/news/533677.html

相关文章:

  • IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决
  • C基础寒假练习(6)
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • 【docker】Failed to allocate manager object, freezing:兼容兼容 cgroup v1 和 v2
  • 我使用deepseek高效学习-分析外文网站Cron定时执行任务
  • Android13-系统服务大管家-ServiceManager进程-启动篇
  • 论文笔记:Rethinking Graph Neural Networks for Anomaly Detection
  • vue知识补充
  • pushgateway指标聚合问题
  • 使用docker搭建FastDFS文件服务
  • 【R语言】数据分析
  • 蓝桥杯C语言组:图论问题
  • jmeter 性能测试Linux 常用的安装
  • 19 角度操作模块(angle.rs)
  • 前端高级面试题及其答案
  • 【ORACLE】这个‘‘和null不等价的场景,deepseek你怎么看?
  • 使用Python实现PDF与SVG相互转换
  • ComfyUI 安装教程:macOS 和 Linux 统一步骤
  • 360手机刷机 360手机解Bootloader 360手机ROOT
  • t113-qt
  • 【真一键部署脚本】——一键部署deepseek
  • 【AI 语音】实时语音交互优化全解析:从 RTC 技术到双讲处理
  • pytest-xdist 进行多进程并发测试
  • 【Android】版本和API对应关系表
  • 通过acme生成与续签ssl证书,并部署到nginx
  • mysql系统库介绍,数据字典(介绍,存储方式,常见表,访问权限),系统表(介绍,不同功能的表)
  • spring 学习(工厂方式 实例化对象(静态工厂,实例化工厂,实现factorybean 规范))
  • MarkupLM:用于视觉丰富文档理解的文本和标记语言预训练
  • 讯飞智作 AI 配音技术浅析(三):自然语言处理
  • kafka服务端之日志存储