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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

简单图层控制功能的实现数据的转换和可视化表达图层属性表的添加和显示图层的添加和移除图层间关系的调整步骤1:设计图层控制的菜单。响应ContextMenuStrip菜单控件,为图层控件添加菜单项(显示属性表菜单和删除图层菜单)。该菜单是在鼠标右键点击图层时弹出的快捷菜单。添加的菜单项修改菜单name属性步骤2:实现图层与图层控制菜单间的关联。响应TOCControl控件的OnMouseDown事件,添加相关代码。usingESRI.ArcGIS.Carto;//因为程序中用到ILayer和//IBasicMap接口,所以需要添加命名空间ILayerlayer=newFeatureLayerClass();privatevoidaxTOCControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvente){this.axTOCControl1.ContextMenuStrip=null;IBasicMapmap=newMapClass();System.Objectother=null;System.Objectindex=null;ESRI.ArcGIS.Controls.esriTOCControlItemitem=ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;this.axTOCControl1.HitTest(e.x,e.y,refitem,refmap,reflayer,refother,refindex);if(item==ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer&&e.button==2){System.Drawing.Pointpt=newSystem.Drawing.Point();pt.X=e.x;pt.Y=e.y;pt=this.axTOCControl1.PointToScreen(pt);this.图层控制菜单.Show(pt);}}运行程序显示结果如下:步骤3:设计一个属性表窗体。1添加一个属性表窗体。2为属性表窗体添加DataGridView控件,并修改控件Anchor属性为(Top,Bottom,Left,Right)。3为属性表窗体编写相关代码,实现图层属性信息往属性表中的添加。publicpartialclass属性表:Form{privateILayerlayer;public属性表(ILayerlyr)//对属性表窗口进行初始化{InitializeComponent();layer=lyr;this.Text=\+layer.Name+\属性表;}privatevoid属性表_Load(objectsender,EventArgse){try{ITablelyrtable=(ITable)layer;DataTabletable=newDataTable();IFieldfield;for(inti=0;ilyrtable.Fields.FieldCount;i++){field=lyrtable.Fields.get_Field(i);table.Columns.Add(field.Name);}object[]values=newobject[lyrtable.Fields.FieldCount];IQueryFilterqueryFilter=newQueryFilterClass();ICursorcursor=lyrtable.Search(queryFilter,true);IRowrow;while((row=cursor.NextRow())!=null){for(intj=0;jlyrtable.Fields.FieldCount;j++){objectob=row.get_Value(j);values[j]=ob;}table.Rows.Add(values);}this.dataGridView1.DataSource=table;}catch(Exceptione1){MessageBox.Show(无法显示属性表!);this.Close();}}}由于该段代码中用到了ILayer接口,所以要在属性表.cs开头添加命名空间ESRI.ArcGIS.Carto。同时也用到ITable,IQueryFilter,ICursor,IRow接口,所以要添加命名空间ESRI.ArcGIS.Geodatabase。即添加如下代码:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geodatabase;但此时运行程序会报错:命名空间ESRI.ArcGIS中不存在类型名或命名空间名称Geodatabase(是缺少程序集引用吗?)。这时需要在资源管理器中将该程序集添加进来。右键点击引用,从弹出的菜单中点击“添加引用”菜单项,再在弹出的对话框中将ESRI.ArcGIS.Geodatabase命名空间添加进来步骤4:建立图层控制菜单与属性表的连接,实现属性表界面的显示。双击图层控制菜单上的“显示属性表”菜单项,在响应的Click事件中添加如下代码:privatevoid显示属性表ToolStripMenuItem_Click(objectsender,EventArgse){属性表form=new属性表(layer);form.Show();}步骤5:运行程序,查看图层属性。右键点击该图层,从弹出快捷菜单中选择“显示属性表”菜单项。弹出该图层的属性表界面步骤6:这里实现一个通过属性表中属性查找图形要素的小功能。响应datagridView1控件的SelectionChanged事件。先在主窗口中编写一个公有函数,以获取主窗口的MapControl控件,因为该控件是Private类型。在其它窗体中不能直接调用。publicESRI.ArcGIS.Controls.AxMapControlgetMapControl(){returnaxMapControl1;}再在SelectionChanged事件中添加如下代码:privatevoiddataGridView1_SelectionChanged(objectsender,EventArgse){DataGridViewSelectedRowCollectionSelRows=this.dataGridView1.SelectedRows;DataGridViewRowrow;主窗口form=(主窗口)Application.OpenForms[0];IMapm=form.getMapControl().Map;m.ClearSelection();for(inti=0;iSelRows.Count;i++){row=SelRows[i];intID=Convert.ToInt32(row.Cells[FID].Value.ToString());IFeatureLayerflyr=(IFeatureLayer)layer;IFeatureClassfeaturecls=flyr.FeatureClass;IFeaturefeature=featurecls.GetFeature(ID);m.SelectFeature(layer,feature);//获取属性表中选中行对应的图形要素}form.getMapControl().Refresh();}运行程序,显示结果如下:属性表中选择一个点要素时,将其高亮显示属性表中拖动选择多个点要素时,将其高亮显示步骤1:在ToolBarControl控件中直接添加“图层添加”按钮,即可以实现图层添加功能(搭建的框架中已有该按钮)。步骤2:前面建立的图层控制菜单中已经包含了删除图层的菜单,此时只需要响应该菜单,编辑相关程序代码,即可以实现图层删除功能。双击该菜单项,响应Click事件在响应的Click事件中添加相关代码:privatevoid删除此图层ToolStripMenuItem_Click(objectsender,EventArgse){for(inti=0;ithis.axMapControl1.Map.LayerCount;i++){if(this.axMapControl1.Map.get_Layer(i)==layer){this.axMapControl1.DeleteLayer(i);}}}运行程序,显示如下:删除biaozhidian图层前删除biaozhidian图层后在ArcMap中,要调整图层的现实顺序,只需要简单的鼠标拖拽就可以完成,既简单又直观。但是TOCControl控件并未实现此功能。本实例即实现此功能。在本实例中主要利用TOCControl控件的OnMouseDown、OnMouseUp两个时间和HitTest()、Update()方法。OnMouseDown事件方法的主要功能是获取源图层pMovelayer。OnMouseUp事件方法的主要功能是:1)获取目标图层及其索引号;2)利用IMap提供的Movelayer(pMoveLayer,Toindex)将源图层pMoveLayer移到目标图层(Toindex)的下方;3)使用ITOCControl提供的Update()方法更新TOCControl控件中显示的内容。步骤1:在主窗口.cs中申明两个全局变量,并响应TOCControl控件的OnMouseDown事件(前面已响应此事件),添加相关代码。//申明全局变量ILayerpMoveLayer;intToindex;privatevoidaxTOCControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvente){//前面已添加代码,这里不需要再添加this.axTOCControl1.ContextMenuStrip=null;IBasicMapmap=newMapClass();System.Objectother=null;System.Objectindex=null;ESRI.ArcGIS.Controls.esriTOCControlItemitem=ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;this.axTOCControl1.HitTest(e.x,e.y,refitem,refmap,reflayer,refother,refindex);if(item==ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer&&e.button==2){System.Drawing.Pointpt=newSystem.Drawing.Point();pt.X=e.x;pt.Y=e.y;pt=this.axTOCControl1.PointToScreen(pt);this.图层控制菜单.Show(pt);}//该步骤要添加的代码,获取源图层if(item==ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer&&e.button==1){if(layerisIAnn

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功