需求:实现和GIS桌面端中Identify的类似功能,鼠标滑动的时候可以显示鼠标所在位置的要素的指定字段的值.。

主要操作流程:

①先打开一个对话框,用于选择需要显示的图层和字段名

②点击确定之后,在mapControl上鼠标滑动的时候利用axMapControl的showTips功能实现实时显示,相对于Identify,取消的点击查看属性,和只能查看所有属性的弊端。

主窗体代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls; namespace MapChuanzhi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int s_flag = 0;
private void button2_Click(object sender, EventArgs e)
{
IMap pMap = this.axMapControl1.Map;
Form2 frm2 = new Form2(pMap);
frm2.formDelegate += new FormDelegate(Display);
frm2.StartPosition = FormStartPosition.CenterScreen;
frm2.ShowDialog();
s_flag = 1;
} string LayerName = "";
List<string> FieldList = new List<string>();
public void Display(List<string> lc)
{
LayerName = lc[0].ToString();
FieldList.Clear();
for (int j = 1; j < lc.Count; j++)
{
FieldList.Add(lc[j].ToString());
}
} private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
switch (s_flag)
{
case 1:
showtips(FieldList, e);
break;
default:
break;
}
} private void showtips(List<string> index, IMapControlEvents2_OnMouseMoveEvent e)
{ StringBuilder sb = new StringBuilder();
string headd = string.Format("{0}:{1}", "图层", LayerName);
sb.AppendLine(headd);
sb.AppendLine( "————————");
for (int i = 0; i < this.axMapControl1.Map.LayerCount; i++)
{
if (axMapControl1.get_Layer(i).Name.ToString().Equals(LayerName))
{ for (int j = 0; j < index.Count; j++)
{ IFeatureLayer pFLayer = axMapControl1.Map.get_Layer(i) as IFeatureLayer;
pFLayer.DisplayField = index[j].ToString();
pFLayer.ShowTips = true;
string Text = pFLayer.get_TipText(e.mapX, e.mapY, axMapControl1.ActiveView.FullExtent.Width / 1000);
if (string.IsNullOrWhiteSpace(Text))
{
break;
}
sb.AppendLine(string.Format("{0}:{1}",index[j].ToString(),Text));
} if (sb.Length == headd.Length + "————————".Length + 4)
sb.Clear();
toolTip1.SetToolTip(axMapControl1, sb.ToString()); }
}
} }
}

属性窗口代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto; namespace MapChuanzhi
{
public delegate void FormDelegate(List<string> FormMessage);
public partial class Form2 : Form
{
private ESRI.ArcGIS.Carto.IMap pMap; public Form2( ESRI.ArcGIS.Carto.IMap pMap)
{
InitializeComponent();
// TODO: Complete member initialization
this.pMap = pMap;
} private void Form2_Load(object sender, EventArgs e)
{
for (int i = 0; i < pMap.LayerCount; i++)
{
this.comboBox1.Items.Add(pMap.get_Layer(i).Name.ToString());
}
}
string selectItems;
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
selectItems=comboBox1.SelectedItem.ToString();
for (int i = 0; i < pMap.LayerCount; i++)
{
if (pMap.get_Layer(i).Name.ToString() == selectItems)
{
IFeatureLayer pFLayer = pMap.get_Layer(i) as IFeatureLayer;
IFeatureClass pFClass = pFLayer.FeatureClass;
this.checkedListBox1.Items.Clear();
for (int j = 0; j < pFClass.Fields.FieldCount; j++)
{
this.checkedListBox1.Items.Add(pFClass.Fields.get_Field(j).Name);
}
try
{
checkedListBox1.Items.Remove("Shape");
}
catch (Exception)
{ throw;
}
}
}
} /***************窗体委托传值*********************/
public FormDelegate formDelegate;
private void button1_Click(object sender, EventArgs e)
{
if (this.checkedListBox1.CheckedItems == null || this.comboBox1.SelectedItem== null)
return;
List<string> cz = new List<string>();
cz.Add(comboBox1.SelectedItem.ToString());
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
cz.Add(checkedListBox1.CheckedItems[i].ToString());
}
try
{
cz.Remove("Shape");
}
catch
{ }
formDelegate(cz);
this.Dispose();
} private void button2_Click(object sender, EventArgs e)
{
if (this.button2.Text == "全选")
{
for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
{
this.checkedListBox1.SetItemChecked(i, true);
this.button2.Text = "取消全选";
}
}
else
{
for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
{
this.checkedListBox1.SetItemChecked(i, false);
this.button2.Text = "全选";
}
}
} }
}

arcengine动态显示所需字段值的更多相关文章

  1. Laravel 校验规则之字段值唯一性校验

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] laravel validator unique 'name' => 'required|unique:test,disp ...

  2. QGis(三)查询矢量图层的要素属性字段值(转载)

    QGis(三)查询矢量图层的要素属性字段值 https://github.com/gwaldron/osgearth/issues/489 当加载一个矢量图层后,如果要查看要素的属性字段值,则需要实现 ...

  3. 因DataTable的字段值为DBNull引发的异常

    1 问题重现 (1)新建项目DBNullExp.项目属性为"控制台应用程序": (2)在项目下新建数据集Schools(数据集文件的后缀名为.xsd): watermark/2/t ...

  4. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  5. MSCRM CRM 获取PickList 字段值函数解决方案

    表单中有很多picklist字段 不想写链接stringmap代码: 实体ID查询方法: SELECT ObjectTypeCode from Entity  where  name='实体名称' 调 ...

  6. Mysql Sql语句令某字段值等于原值加上一个字符串

    MySQL连贯字符串不能利用加号(+),而利用concat. 比方在aa表的name字段前加字符'x',利用: update aa set name=concat('x',name); 替换: UPD ...

  7. gridView RowDataBound事件 鼠标经过行颜色变化及根据字段值显示指定内容

    protected void gvBarInfo_RowDataBound(object sender, GridViewRowEventArgs e)        {            if ...

  8. SQL 按特定字段值排序

    SQL 按特定字段值排序的代码,有需要的朋友可以参考下. id, name shandong01 name1 shandong02 name2 shandong03 name3 beijing01 n ...

  9. GridView控件RowDataBound事件中获取列字段值的几种途径 !!!

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == ...

  10. java 使用BeanUtils.copyProperties(Object source,Object target) 复制字段值

    BeanUtils.copyProperties(person, wsPerson);把person的字段值,复制给wsPerson // 只复制两个实体中,字段名称一样的 很有用的一个功能...

随机推荐

  1. No.1.2

    列表标签 无序列表 标签名 说明 ul 表示无序列表的整体,用于包裹li标签 li 表示无序列表的每一项,用于包含每一行的内容 有序列表 标签名 说明 ol 表示有序列表的整体,用于包裹li标签 li ...

  2. JS学习-Web Worker

    Web Worker 在专用workers的情况下,DedicatedWorkerGlobalScope 对象代表了worker的上下文(专用workers是指标准worker仅在单一脚本中被使用:共 ...

  3. lnmp 修改MySQL默认密码

    wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh;sh reset_mysql_root_password.sh 执行命 ...

  4. mongoDB日常操作02

    db.TABLE_NAME.find({<query>})//普通查询db.TABLE_NAME.find({<query>},{'_id':0,'f1':1,'f2':1}) ...

  5. mongodb更改账户密码

    docker部署方式更改 sudo docker exec -it mongodb mongo admin (登录数据库容器) use admin db.auth('admin','shijiehep ...

  6. 「DIARY」PKUSC 2021 游记

    冬令营没了但是还有夏令营 (完蛋,前两天忘写游记了,完全没想起来--最后一天补一补) 试题分析在另外一篇博客上 # Day 0 早上去机场的时候把手机落在出租车上了 (还好之后找回来了),导致我前两天 ...

  7. 解决java.sql.SQLException: null, message from server: "Host 'XXX' is not allowed to connect异常

    Sqoop连接MySQL报异常.这个异常是数据库只允许localhost或127.0.0.1访问,不允许远程访问.我用的本机IP都不行. 解决办法:修改访问权限即可. 打开cmd,进入mysql fl ...

  8. 挖坑——未完成题目列表QwQ

    OI一些的小计划: 日拱一卒,功不唐捐! Unfinished luogu P2814 家谱 Luogu P2076 聚会 luogu P2212 Watering the Fields  草坪上有N ...

  9. 使用LitJson输出格式化json文件到本地

    百度上搜了半天,竟然没有C#使用LitJson格式化输出的例子,全都是Newtonsoft.Json的,最后在litjson的官网找到了方法. 给大家分享一下: https://litjson.net ...

  10. react复制文案到剪切板

    这里使用别人写好的插件. 1.安装要用到的插件:copy-to-clipboard: 2.导入: import copy from 'copy-to-clipboard'; 3.使用: copy(co ...