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

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

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

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

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


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

目录

一、添加菜单

二、设置菜单项选中状态

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

四、添加右键菜单


一、添加菜单

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

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

事件处理程序一般是:

cs 复制代码
private void 菜单项ID_Click(object sender, EventArgs e)
{
}

这部分应该很简单了。

二、设置菜单项选中状态

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

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

cs 复制代码
			菜单项ID.Checked = true;

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

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

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

代码示例:

cs 复制代码
//定义枚举和枚举变量	
    	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,编辑菜单的操作和窗口菜单并没有什么区别。

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

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

cs 复制代码
		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方法而已,参数也很简单:父窗口/控件,鼠标位置,在这里参数都是直接来自鼠标事件的参数的。


(这里是文档结束)

相关推荐
爱吃巧克力的程序媛几秒前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
勘察加熊人11 分钟前
forms实现俄罗斯方块
c#
独好紫罗兰42 分钟前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
篝火悟者1 小时前
自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
c语言·开发语言
genispan1 小时前
QT/C++ 多线程并发下载实践
开发语言·c++·qt
-代号95272 小时前
【JavaScript】十三、事件监听与事件类型
开发语言·javascript·ecmascript
写代码的小王吧2 小时前
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
java·开发语言·网络·安全·web安全·网络安全·jar
小卡皮巴拉2 小时前
【力扣刷题实战】矩阵区域和
开发语言·c++·算法·leetcode·前缀和·矩阵
努力搬砖的咸鱼2 小时前
Qt中的数据解析--XML与JSON处理全攻略
xml·开发语言·qt·json
Pacify_The_North2 小时前
【C++进阶三】vector深度剖析(迭代器失效和深浅拷贝)
开发语言·c++·windows·visualstudio