图层树右键菜单结合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操作过程的更多相关文章

  1. PIE SDK图层树右键菜单与命令绑定

    1.   功能简介 上一节已经介绍过图层树如何和地图和制图关联,图层树右键菜单主要是基于TocControl控件进行对菜单节点进行控制,TocControl主要作用是显示当前加载的图层有哪些.采用什么 ...

  2. WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法

    原文:WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法 问题描述 今天发现如果我想在一个TextBlock弄一个右键菜单,并且使用Command绑定,结果发 ...

  3. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  4. arcengine实现右键菜单打开/关闭所有图层

    参考资料:  http://developer.51cto.com/art/201104/256774.htm 参照后自己做的: 关于右键菜单的几个有价值的网址: http://blog.csdn.n ...

  5. 将Sublime Text 添加到鼠标右键菜单的教程方法

    安装notepad++软件,在菜单右键自动会添加“edit with notepad++"的选项,那么怎么将Sublime Text 添加到鼠标右键菜单呢?下面是我的操作过程,希望有帮助! ...

  6. win10 右键菜单添加Git Hash Here

    1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Background] ...

  7. 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序

    有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...

  8. EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)

    TreePanel(带右键菜单,节点自定义属性) 其实这个树控件也挺好用的.http://www.ztree.me/v3/main.php#_zTreeInfo html <ext:Panel ...

  9. 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

    @color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...

随机推荐

  1. F5部署SSL证书

    查找中间证书 为了保证可以兼容所有浏览器,我们必须在服务器上安装中间证书,请到 中间证书下载工具,输入您的Server.cer,然后下载中间证书,请将中间证书保存为Chain.cer. 证书文件的上传 ...

  2. Ubuntu18.04.2安装中文输入法

    转载请注明出处: BooTurbo  https://www.cnblogs.com/booturbo/p/11287557.html 1.英文的Ubuntu系统,首先要安装中文语言,在 Settin ...

  3. uwsgi + nginx 发布

    下载uwsgi 基于pip 若是没有下载 yum install -y python2-pip pip install uwsgi 出上面的错 ,安装python的development包 yum i ...

  4. MyBatis学习笔记-1 Idea配置MyBatis

    一.创建工程 1.创建Java项目,勾选Java EE,Next,修改名称,Finish 2.在WEB-INF下创建两个文件夹classes和lib,分别用作输出文件目录和库文件目录 3.File-P ...

  5. Spring(004)-Bean装配

    一,问题,Bean找不到 代码 @Component public class DemoClass { public int doSth() { ; } } 测试代码 @RunWith(SpringJ ...

  6. 201871010125 王玉江 《面向对象程序设计(java)》 第四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wswyj/ 作业学习目 ...

  7. 201871010132-张潇潇-《面向对象程序设计(java)》第六-七周学习总结

    201871010132-张潇潇-<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  8. 【oracle】lpad函数 作用(填充)

  9. 学习-velocity

    Velocity是什么?  Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码 ...

  10. 2.GO-可变参数函数、匿名函数和函数变量

    2.1.可变参数函数 可变参数指参数的个数可以是任意个 可变参数必须在参数列表最后的位置,在参数名和类型之间添加三个点表示可变参数函数 声明函数时,在函数体把可变参数当作切片使用即可 package ...