23 资源环境信息系统(GIS07)C#4

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

object[lyrtable.Fields.FieldCount];
IQueryFilter queryFilter = new QueryFilterClass();
ICursor cursor = lyrtable.Search(queryFilter, true);
IRow row;
while ((row = cursor.NextRow()) != null)
{
//前面已添加代码,这里不需要再添加
this.axTOCControl1.ContextMenuStrip = null;
IBasicMap map = new MapClass();
System.Object other = null;
System.Object index = null;
ESRI.ArcGIS.Controls.esriTOCControlItem item =
{
属性表 form = new 属性表(layer);
form.Show();
}
步骤5:运行程序,查看图层属性。
右键点击该图层,从弹出快捷菜单中选择“显示 属性表”菜单项。弹出该图层的属性表界面
步骤6:这里实现一个通过属性表中属性查找图 形要素的小功能。响应datagridView1控件的 SelectionChanged事件。
ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone; this.axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref
other, ref index);
OnMouseDown事件方法的主要功能是获取源图层 pMovelayer。
OnMouseUp事件方法的主要功能是:
1) 获取目标图层及其索引号;
2) 利用IMap提供的Movelayer(pMoveLayer, Toindex)将源图 层pMoveLayer移到目标图层(Toindex)的下方;3)使用 ITOCControl提供的Update()方法更新TOCControl控件中显示 的内容。
m.SelectFeature(layer, feature); //获取属性表中选中行对应的图形要素
}
form.getMapControl().Refresh();
}
运行程序,显示结果如下:
属性表中选择一个点要素时,将其高亮显示
属性表中拖动选择多个点要素时,将其高亮 显示
步骤1:在ToolBarControl控件中直接添加“图 层添加”按钮,即可以实现图层添加功能(搭 建的框架中已有该按钮)。
IField field;
for (int i = 0; i < lyrtable.Fields.FieldCount; i++)
{
field = lyrtable.Fields.get_Field(i);
table.Columns.Add(field.Name);
}
object[] values = new
步骤2:前面建立的图层控制菜单中已经包含了 删除图层的菜单,此时只需要响应该菜单,编辑 相关程序代码,即可以实现图层删除功能。
双击该菜单项,响应 Click事件
在响应的Click事件中添加相关代码:
private void 删除此图层 ToolStripMenuItem_Click(object sender, EventArgs e)
{
for (int j = 0; j < lyrtable.Fields.FieldCount; j++)
{
object ob = row.get_Value(j);
values[j] = ob;
}
table.Rows.Add(values);
}
this.dataGridView1.DataSource = table;
主窗口 form = (主窗口)Application.OpenForms[0];
IMap m = form.getMapControl().Map;
m.ClearSelection();
for (int i = 0; i < SelRows.Count; i++)
{
row = SelRows[i];
if (item ==
ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer &&
e.button == 2)
{
System.Drawing.Point pt = new System.Drawing.Point();
步骤2:实现图层与图层控制菜单间的关联。响应 TOCControl控件的OnMouseDown事件,添加相关代码。
using ESRI.ArcGIS.Carto; //因为程序中用到ILayer和 //IBasicMap 接口,所以需要添加命名空间
ILayer layer = new FeatureLayerClass(); private void axTOCControl1_OnMouseDown(object sender,
{
for (int i = 0; i <
this.axMapControl1.Map.LayerCount; i++)
{
if (this.axMapControl1.Map.get_Layer(i) ==
layer)
{
this.axMapControl1.DeleteLayer(i);
}
}
}
运行程序,显示如下:
layer = lyr;
this.Text = "\"" + layer.Name + "\" 属性表";
}
private void 属性表_Load(object sender, EventArgs e)
{
try
{
ITable lyrtable = (ITable)layer;
Leabharlann Baidu
DataTable table = new DataTable();
int ID = Convert.ToInt32(row.Cells["FID"].Value.ToString());
IFeatureLayer flyr = (IFeatureLayer)layer;
IFeatureClass featurecls = flyr.FeatureClass;
IFeature feature = featurecls.GetFeature(ID);
删除
biaozhidian 图层前
删除
biaozhidian 图层后
在ArcMap中,要调整图层的现实顺序,只需要简 单的鼠标拖拽就可以完成,既简单又直观。但是 TOCControl控件并未实现此功能。本实例即实现此 功能。
在本实例中主要利用TOCControl控件的 OnMouseDown、OnMouseUp两个时间和HitTest()、 Update()方法。
}
catch (Exception e1)
{
MessageBox.Show("无法显示属性表!");
this.Close();
}
}
}
由于该段代码中用到了ILayer接口,所以要在属性 表.cs开头添加命名空间ESRI.ArcGIS.Carto。同时也 用到ITable, IQueryFilter, ICursor, IRow接口,所以 要添加命名空间ESRI.ArcGIS.Geodatabase。即添加 如下代码:
pt.Y = e.y;
pt = this.axTOCControl1.PointToScreen(pt);
this.图层控制菜单.Show(pt);
}
}
运行程序显示结果如下:
步骤3:设计一个属性表窗体。
1>添加一个属性表窗体。
2> 为属性表窗体添加DataGridView控件,并修改控 件Anchor属性为(Top, Bottom, Left, Right)。
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
DataGridViewSelectedRowCollection SelRows =
this.dataGridView1.SelectedRows;
DataGridViewRow row;
3> 为属性表窗体编写相关代码,实现图层属性 信息往属性表中的添加。
public partial class 属性表 : Form
{
private ILayer layer;
public 属性表(ILayer lyr) //对属性表窗口进行初 始化
{
InitializeComponent();
步骤1:在主窗口.cs中申明两个全局变量,并响应 TOCControl控件的OnMouseDown事件(前面已响 应此事件),添加相关代码。
//申明全局变量 ILayer pMoveLayer; int Toindex;
private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e)
ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e) { this.axTOCControl1.ContextMenuStrip = null; IBasicMap map = new MapClass();
System.Object other = null; System.Object index = null; ESRI.ArcGIS.Controls.esriTOCControlItem item =
ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;
this.axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer,
ref other, ref index);
ESRI.ArcGIS.Geodatabase命名空间添加进来
步骤4:建立图层控制菜单与属性表的连接,实现 属性表界面的显示。双击图层控制菜单上的“显示 属性表”菜单项,在响应的Click事件中添加如下代 码:
private void 显示属性表 ToolStripMenuItem_Click(object sender, EventArgs e)
简单图层控制功能的实现 数据的转换和可视化表达
图层属性表的添加和显示 图层的添加和移除 图层间关系的调整
步骤1:设计图层控制的菜单。响应ContextMenuStrip菜单控件,为 图层控件添加菜单项(显示属性表菜单和删除图层菜单)。该菜单 是在鼠标右键点击图层时弹出的快捷菜单。
添加的菜单项 修改菜单name属性
if (item == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTO CControlItemLayer && e.button == 2)
{
System.Drawing.Point pt = new
System.Drawing.Point();
pt.X = e.x;
先在主窗口中编写一个公有函数,以获取主窗 口的MapControl控件,因为该控件是Private类 型。在其它窗体中不能直接调用。
public ESRI.ArcGIS.Controls.AxMapControl getMapControl()
{
return axMapControl1;
}
再在SelectionChanged事件中添加如下代码:
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
但此时运行程序会报错:命名空间ESRI.ArcGIS中不 存在类型名或命名空间名称Geodatabase(是缺少 程序集引用吗?)。这时需要在资源管理器中将该 程序集添加进来。
右键点击引用,从弹出的菜单中点击“添加引用” 菜单项,再在弹出的对话框中将
相关文档
最新文档