图层树右键菜单结合Command操作过程
图层树右键菜单结合Command操作过程
根据老师线上培训图层树右键菜单的生成,添加contextMenuStrip后再依次添加、命名ToolStripMenuItem,若将全部‘项’添加Click事件,假如图层树中 矢量和栅格的右键菜单都要添加数据,那么就要写2个添加数据的点击事件,那么可不可以就写一个添加数据的方法节省代码呢?中间如何联通呢?
解决过程如下:
1.窗体的toc控件添加‘MouseDown’ 事件,加入代码
private void tocControlMain_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)//TOC图层树中右击事件
{
PIE.AxControls.PIETOCNodeType type = new PIE.AxControls.PIETOCNodeType();//图层树控件节点类型
IMap map = null;
ILayer layer = null;
Object unk = null;
Object data = null;
tocControlMain.HitTest(e.X, e.Y, ref type, ref map, ref layer, ref unk, ref data);// 传递节点数据类型
PIE.AxControls.PIETOCNodeTag tag = new PIETOCNodeTag();
tag.Map = map;//节点所包含的参数类的参数
tag.Layer = layer;
tag.UNK = unk;
tag.Data = data;
mapControl1.CustomerProperty = tag;//参数传给属性信息
switch (type)
{
case PIETOCNodeType.FeatureLayer://矢量
IFeatureLayer featureLayer = layer as IFeatureLayer;
if (featureLayer == null) return;
this.contextMenuStrip_FeatureLayer.Show(tocControlMain, new System.Drawing.Point(e.X, e.Y)); //显示菜单
break;
case PIETOCNodeType.RasterLayer://栅格
IRasterLayer pRasterLayer = layer as IRasterLayer;
if (pRasterLayer == null) return;
this.contextMenuStrip1_RasterLay.Show(tocControlMain, new System.Drawing.Point(e.X, e.Y)); //显示菜单
break;
case PIETOCNodeType.Map://地图
this.contextMenuStrip_TocMenu.Show(tocControlMain, new System.Drawing.Point(e.X, e.Y));//显示菜单
break;
}
}
}
2.
点该处然后在属性中的‘MouseUp’右侧添加‘tocMenuItem_MouUpClick’,双击进入编辑代码,下面代码可被图层树右键菜单项 共用,后面重写点击事件,在不同右键菜单实现相同功能可共用代码。
private void tocMenuItem_MouUpClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)//选择鼠标左键为作用生效键
{
return;
}
ToolStripMenuItem item = sender as ToolStripMenuItem;
if (item == null)
{
return;
}
ICommand command = item.Tag as ICommand;//本人认为 参数类强制转换为ICommand类
if (command == null)
{
return;
}
command.OnCreate(mapControl1); //必须加
command.OnClick();
ITool tool = command as ITool;
if (tool != null)
{
mapControl1.CurrentTool = tool;
}
}
3.在初始化函数中设置TOC右键菜单,部分如下:
private void InitFrm()//初始化窗体
{ //toc图层编辑
2 toolStripMenuItem_DeleteRLayer.Tag = new Command.DelLayerCommand();//删除所有图层
3 toolStripMenuItem_TocAddData.Tag = new Command.AddDataCommand();
ModifyStrToolStripMenuItem.Tag = new Command.SpatialReferenceSelectorCommand();
4.在解决方案资源管理器如图添加文件夹和类:
5.如下添加Command类:
using PIE.AxControls;
using PIE.Controls;
using PIE.Carto;
namespace PIEAppication.Command
{
class SpatialReferenceSelectorCommand: BaseCommand
{
#region 私有变量
/// <summary>
/// 地图实例
/// </summary>
private IMapControl m_MapControl;
#endregion /// <summary>
/// 构造函数
/// </summary>
public SpatialReferenceSelectorCommand()
{
base.Caption = "坐标系选择改变";
base.ToolTip = "坐标系选择改变";
}
/// <summary>
/// 重写单击按钮事件
/// </summary>
public override void OnClick()
{
//1.获取当前地图
IMap map = m_HookHelper.FocusMap;
//2.实例化空间参考窗口对象
PIE.AxControls.SpatialReferenceSelectorDialog sRSelectorDialog = new SpatialReferenceSelectorDialog();
sRSelectorDialog.SetMap(map); //设置地图(地图对象)
sRSelectorDialog.SpatialReference = map.SpatialReference;
if (sRSelectorDialog.ShowDialog() != 1) return;//1表示确定、0表示取消
map.SpatialReference = sRSelectorDialog.SpatialReference;
(map as IActiveView).PartialRefresh(ViewDrawPhaseType.ViewAll);
}
}
}
6.当栅格和矢量对象都要设置选择坐标系时,可以都以相同的MouseUp事件、再初始化设置,就可以共用Command类。执行效果如下:



7.此外发现其它菜单点击方法也可以使用以上,MouseUp事件、Command类进行实现,当软件多处使用相同功能时可简化代码。同理还实现了矢量数据属性表的显示,如下:
一些软件的右键总是有些便捷的功能,大家可以试试右键菜单功能哦
图层树右键菜单结合Command操作过程的更多相关文章
- PIE SDK图层树右键菜单与命令绑定
1. 功能简介 上一节已经介绍过图层树如何和地图和制图关联,图层树右键菜单主要是基于TocControl控件进行对菜单节点进行控制,TocControl主要作用是显示当前加载的图层有哪些.采用什么 ...
- WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法
原文:WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法 问题描述 今天发现如果我想在一个TextBlock弄一个右键菜单,并且使用Command绑定,结果发 ...
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- arcengine实现右键菜单打开/关闭所有图层
参考资料: http://developer.51cto.com/art/201104/256774.htm 参照后自己做的: 关于右键菜单的几个有价值的网址: http://blog.csdn.n ...
- 将Sublime Text 添加到鼠标右键菜单的教程方法
安装notepad++软件,在菜单右键自动会添加“edit with notepad++"的选项,那么怎么将Sublime Text 添加到鼠标右键菜单呢?下面是我的操作过程,希望有帮助! ...
- win10 右键菜单添加Git Hash Here
1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Background] ...
- 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序
有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...
- EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)
TreePanel(带右键菜单,节点自定义属性) 其实这个树控件也挺好用的.http://www.ztree.me/v3/main.php#_zTreeInfo html <ext:Panel ...
- 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)
@color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...
随机推荐
- 08、启动过程+at+crond+anacron
[root@li ~]# 加电--BIOS (basic input output system)--以什么设备来启动--/dev/sda -- mbr -- grub.conf --vmlinux ...
- pytest中怎么实现参数化?
我们在组自动化项目中,肯定会遇到需要数据驱动的地方,在unittest中我们直接采用ddt的方式,但是在pytest中我们不能用ddt来实现,所以我们采用了参数化的方式来实现 那么具体怎么完成这个参数 ...
- SSM整合开发——基于SSM的OA系统
一.课程介绍 链接: https://pan.baidu.com/s/18B-lWfOUnKZPvuVEHY_NmQ 提取码: ky7t 复制这段内容后打开百度网盘手机App,操作更方便哦 需要 to ...
- Rust中的Trait
类似接口,但和php中的trait又有点不一样. pub trait Summary { fn summarize(&self) -> String; } pub struct NewA ...
- git的使用(二)
GITHUB 简介 github可以是全世界最大的同性交友网站,其实就是和百度云一个性质. gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅 ...
- LOJ 3184: 「CEOI2018」斐波那契表示法
题目传送门:LOJ #3184. 题意简述: 题目说得很清楚了. 题解: 首先需要了解「斐波那契数系」为何物. 按照题目中定义的斐波那契数列 \(F_n\),可以证明,每个非负整数 \(n\) 都能够 ...
- Nginx介绍(一)
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务. Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景 ...
- pycharm访问mysql数据库
不需要像eclipse那样添加驱动包,在pycharm里面下载一个pymysql包即可. 然后链接自己电脑的mysql并进行访问即可. 源码如下(参考博客:https://blog.csdn.net/ ...
- POJ3630-Phone List-(字典树)
一直没有学字典树,听起来很唬人,闲来无事找一道入门题做做. 字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以 ...
- Spring Cloud微服务安全实战_3-5_API安全之常见问题
1,数据校验,解决接口层的参数校验,是api安全的前线.可以用JSR303注解进行接口层面的校验 ,参考文章:https://www.ibm.com/developerworks/cn/java/j- ...