场景

Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100140716

在上面博客实现的自定义右键以及汉化右键的基础上,怎样实现将自带的右键功能比如打印和页面设置合并为一个选项打印,并将上两个合并为其二级子菜单。

最终实现效果如下

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先在循环所有的menuStrip.Items时候,通过item.Visible =
false;将原来的打印与打印页面设置的item禁用。

foreach (ToolStripMenuItem item in menuStrip.Items)
{
switch (item.Name)
{
case "copied_to_clip":
item.Text = @"复制到剪贴板";
break;
case "copy":
item.Text = @"复制";
item.Click += item_Click;
break;
case "page_setup":
item.Text = @"打印页面设置";
item.Visible = false;
break;
case "print":
item.Text = @"打印";
item.Visible = false;
break;
case "save_as":
item.Text = @"另存图表...";
break;
case "set_default":
item.Text = @"恢复默认大小";
break;
case "show_val":
item.Text = @"显示节点数值";
item.Visible = false;
break;
case "title_def":
item.Text = @"标题";
break;
case "undo_all":
item.Text = @"还原所有缩放";
item.Visible = false;
break;
case "unpan":
item.Text = @"还原上一步缩放";
item.Visible = false;
break;
case "unzoom":
item.Text = @"还原缩放";
item.Visible = false;
break;
case "x_title_def":
item.Text = @"X 轴";
break;
case "y_title_def":
item.Text = @"Y 轴";
break;
}
}

然后在扩展右键菜单时自定义二级子菜单效果,并在子菜单中执行ZedControl的自带的右键事件。

     ToolStripMenuItem mnuDirectPrint = new ToolStripMenuItem("直接打印");
mnuDirectPrint.Name = "directPrint";
mnuDirectPrint.Text = "直接打印";
mnuDirectPrint.Click += delegate(object sender, EventArgs e)
{
control.DoPrint();
}; ToolStripMenuItem mnuPrintPageSet = new ToolStripMenuItem("打印页面设置");
mnuPrintPageSet.Name = "printPageSet";
mnuPrintPageSet.Text = "打印页面设置";
mnuPrintPageSet.Click += delegate(object sender, EventArgs e)
{
control.DoPageSetup();
}; ToolStripMenuItem mnuPrint = new ToolStripMenuItem();
mnuPrint.Name = "mnuPrint";
mnuPrint.Text = "打印";
mnuPrint.DropDownItems.Add(mnuDirectPrint);
mnuPrint.DropDownItems.Add(mnuPrintPageSet); menuStrip.Items.Add(mnuPrint);

完整示例代码

首先右键菜单事件重新订阅

            zgc.ContextMenuBuilder -= zgc_ContextMenuBuilder;     //上下文菜单生成事件订阅
zgc.ContextMenuBuilder += zgc_ContextMenuBuilder; //上下文菜单生成事件订阅

然后在实现事件中

private static void zgc_ContextMenuBuilder(ZedGraphControl control, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectState objState)
{
#region 扩展上下文菜单 #region 打印
ToolStripMenuItem mnuDirectPrint = new ToolStripMenuItem("直接打印");
mnuDirectPrint.Name = "directPrint";
mnuDirectPrint.Text = "直接打印";
mnuDirectPrint.Click += delegate(object sender, EventArgs e)
{
control.DoPrint();
}; ToolStripMenuItem mnuPrintPageSet = new ToolStripMenuItem("打印页面设置");
mnuPrintPageSet.Name = "printPageSet";
mnuPrintPageSet.Text = "打印页面设置";
mnuPrintPageSet.Click += delegate(object sender, EventArgs e)
{
control.DoPageSetup();
}; ToolStripMenuItem mnuPrint = new ToolStripMenuItem();
mnuPrint.Name = "mnuPrint";
mnuPrint.Text = "打印";
mnuPrint.DropDownItems.Add(mnuDirectPrint);
mnuPrint.DropDownItems.Add(mnuPrintPageSet); menuStrip.Items.Add(mnuPrint); #endregion #region 缩放
ToolStripMenuItem mnuReductLast = new ToolStripMenuItem("还原上一步缩放");
mnuReductLast.Name = "mnuReductLast";
mnuReductLast.Text = "还原上一步缩放";
mnuReductLast.Click += delegate(object sender, EventArgs e)
{
control.ZoomOut(control.GraphPane);
}; ToolStripMenuItem mnuReductAll = new ToolStripMenuItem("还原所有缩放");
mnuReductAll.Name = "mnuReductAll";
mnuReductAll.Text = "还原所有缩放";
mnuReductAll.Click += delegate(object sender, EventArgs e)
{
control.ZoomOutAll(control.GraphPane);
}; ToolStripMenuItem mnuReduct = new ToolStripMenuItem();
mnuReduct.Name = "mnuReduct";
mnuReduct.Text = "缩放";
mnuReduct.DropDownItems.Add(mnuReductLast);
mnuReduct.DropDownItems.Add(mnuReductAll); menuStrip.Items.Add(mnuReduct); #endregion #endregion #region 汉化上下文菜单中的菜单项 foreach (ToolStripMenuItem item in menuStrip.Items)
{
switch (item.Name)
{
case "copied_to_clip":
item.Text = @"复制到剪贴板";
break;
case "copy":
item.Text = @"复制";
item.Click += item_Click;
break;
case "page_setup":
item.Text = @"打印页面设置";
item.Visible = false;
break;
case "print":
item.Text = @"打印";
item.Visible = false;
break;
case "save_as":
item.Text = @"另存图表...";
break;
case "set_default":
item.Text = @"恢复默认大小";
break;
case "show_val":
item.Text = @"显示节点数值";
item.Visible = false;
break;
case "title_def":
item.Text = @"标题";
break;
case "undo_all":
item.Text = @"还原所有缩放";
item.Visible = false;
break;
case "unpan":
item.Text = @"还原上一步缩放";
item.Visible = false;
break;
case "unzoom":
item.Text = @"还原缩放";
item.Visible = false;
break;
case "x_title_def":
item.Text = @"X 轴";
break;
case "y_title_def":
item.Text = @"Y 轴";
break;
}
} #endregion
}

ZedGraph怎样实现将图形右键菜单的打印和页面设置合并为打印的二级子菜单的更多相关文章

  1. element ui el-tree回显问题及提交问题(当后台返回的el-tree相关数组的时候,子菜单未全部选中,但是只要父级菜单的id在数组中,那么他的子菜单为全部选中状态)

    1:问题原因:我们可能使用 this.$refs.tree.setCheckedKeys(this.defalutArr);或者使用:default-expanded-keys="treeD ...

  2. WPF:设置弹出子菜单的是否可用状态及效果

    需求: 设置弹出子菜单(二级)项仅首项可用,其他项均不可用:不可用是呈灰色效果. 注: 菜单项都是依据层级数据模板.具体格式如下: StackBlock{TextBlock{Image}.TextBl ...

  3. 云笔记项目-笔记列表弹出"分享移动删除"子菜单

    业务需求: 笔记列表里还有一个按钮可以弹出子菜单,要求做到以下几点: (1)点击选中的笔记行的弹出按钮后,弹出子菜单,再次点击,子菜单收回. (2)选中其他笔记后,子菜单消失.效果如下图所示: 业务分 ...

  4. JavaScript(获取或设置html元素的宽,高,坐标),确定和判断鼠标是否在元素内部,二级导航菜单鼠标离开样式问题解决

    设置: document.getElementById('id').style.width=value    document.getElementById('id').style.height=va ...

  5. Android学习(二十三)SubMenu 子菜单

    一.SubMenu子菜单 和功能菜单相似,但是可以添加子菜单. 二.实现步骤: 1.通过onCreateOptionsMenu方法创建子菜单,可以通过代码动态创建,也可以通过xml进行创建. 2.通过 ...

  6. ng-zorro 子菜单

    效果 代码 // 初始化菜单 // res.menu是一个Menu数组 // 在后端创建子菜单 res.menu.push({ text: "", i18n: "子菜单& ...

  7. window注册鼠标右键菜单,及子菜单

    最近项目中要用到c#并且要注册鼠标点击右键菜单,在这里总结了几种方法以便记录 效果图: 1,reg注册,创建.reg文件,内容如下 Windows Registry Editor Version 5. ...

  8. 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现 ...

  9. [译]GLUT教程 - 子菜单

    Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Sub Menus 上一节我们介绍了如何创建普通菜单和如果 ...

随机推荐

  1. Cacti 邮件 报警

    一.使用cacti发一封测试邮件   1.使用第三方SMTP 访问 到达  设置——Mail 选项 设置如下: 1处填写收件箱地址 2.处填写发件箱地址 3.处填写smtp服务器地址 4处填写发件箱用 ...

  2. Load_file 常用路径

    load_file 常用路径 WINDOWS下: c:/boot.ini //查看系统版本 c:/windows/php.ini //php配置信息 c:/windows/my.ini //MYSQL ...

  3. Windows2008R2搭建共享存储服务器

    说明: 为了方便公司个部门软件.项目.文档等资料的归档和保存,实现公司内部资料共享及重要资料备份,防止因个人计算机系统故障或硬件故障导致数据丢失而造成数据无法恢复的损失,特建立共享服务器 1.在共享服 ...

  4. ssh常用命令大全

    ssh命令速查表 ssh-add ~/.ssh/your_private_key:输入你的私钥密码 就可以把你的私钥加入到ssh-agent中去 ssh-add -D: 删除所有管理的密钥 ssh-a ...

  5. 图像分割:Semantic/Instance/Panoramic Segmentation

    一. 背景介绍 语义分割(Semantic Segmentation):对一张图片上的所有像素点进行分类,同一物体的不同实例不需要单独分割出来. 实例分割(Instance Segmentation) ...

  6. JMeter接口测试-循环读取库的用户信息

    前言 如何实现循环读取数据库的用户信息,并传递到下一个登录请求呢,下面我们一起来学习吧!在之前我们已经学会了利用JMeter连接数据库了,具体操作可以看我之前的随笔JMeter接口测试-JDBC测试 ...

  7. SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?

    SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ? 我在SAP系统里复制某个标准的采购条件类型,创建了一个新的自定义条件类型ZC05,并将其分配采购定价过程RM0000. 结果却出现一 ...

  8. Spark基础和RDD

    spark 1. Spark的四大特性 速度快 spark比mapreduce快的两个原因 基于内存 1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的 ...

  9. 回炉重造之重读Windows核心编程-002-字符集

    使用Unicode的优势: 便于在不同语言之间进行数据交换. 让你的exe或者dll文件支持所有的语言. 提高应用程序的执行效率. Windows2000是使用Unicode重新开发的,核心部分都需要 ...

  10. DFA与NFA的等价性,DFA化简

    等价性 对于每个NFA M存在一个DFA M',使得L(M)=L(M')--------等价性证明,NFA的确定化 假定NFA M=<S, Σ, δ, S 0 , F>,我们对M的状态转换 ...