欢迎来到天天文库
浏览记录
ID:44987608
大小:3.72 MB
页数:60页
时间:2019-11-06
《23+资源环境信息系统(GIS07)C#4》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于VisualC#和ArcEngine的二次开发系统功能需求简单图层控制功能的实现数据的转换和可视化表达一、简单图层控制功能的实现图层属性表的添加和显示图层的添加和移除图层间关系的调整1图层属性表的添加和显示步骤1:设计图层控制的菜单。响应ContextMenuStrip菜单控件,为图层控件添加菜单项(显示属性表菜单和删除图层菜单)。该菜单是在鼠标右键点击图层时弹出的快捷菜单。添加的菜单项修改菜单name属性步骤2:实现图层与图层控制菜单间的关联。响应TOCControl控件的OnMouseDown事件,添加相关代码。usingESRI.ArcGIS.Carto
2、;//因为程序中用到ILayer和//IBasicMap接口,所以需要添加命名空间ILayerlayer=newFeatureLayerClass();privatevoidaxTOCControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvente){this.axTOCControl1.ContextMenuStrip=null;IBasicMapmap=newMapClass();System.Objectother=null;System.Ob
3、jectindex=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
4、){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属性表
5、: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;i6、;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;j7、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接口,所以要8、添加命名空
6、;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;j7、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接口,所以要8、添加命名空
7、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接口,所以要
8、添加命名空
此文档下载收益归作者所有