右键图层打开属性表

TOCControl控件使用的是用伙伴控件中的数据地图,它控制图层是否在伙伴控件空显示以及和伙伴控件在符号上保持一致,TOCControl为用户提供了一个交互式的环境,如果TOCControl控件的伙伴控件是MapControl控件,当我们将TOCControl控件中图层删掉是,MapControl控件中相应的图层也会被删掉。
TOCControl最常用的就是右击它,然后弹出一个快捷菜单,进行操作。

鼠标右击,弹出一个菜单,选择之后弹出一个属性窗体

 

 代码如下:

namespace openAttributeTable
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         
        private void Form1_Load(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            string fileName = string.Empty;
            if (open.ShowDialog() == DialogResult.OK)
            {
                fileName = open.FileName;
            }
            axMapControl1.LoadMxFile(fileName);
            axMapControl1.ActiveView.Refresh();
            axTOCControl1.SetBuddyControl(axMapControl1);
        }

        ILayer pLayer;//打开属性表的时候使用的图层
        private void btnOpenAttr_Click(object sender, EventArgs e)
        {
            //打开属性表            
            frmAttr frm = new frmAttr(pLayer as IFeatureLayer);
            frm.Show();

        }        
        private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e)
        {
            IBasicMap basicMap=new Map() as IBasicMap;
            esriTOCControlItem item=new esriTOCControlItem();
            pLayer = null;
            object Unk = new object();
            object Data = new object();
            axTOCControl1.HitTest(e.x, e.y, ref item, ref basicMap, ref pLayer, ref Unk, ref Data);
            if (e.button == 2)
            {
                RMenu1.Show(axTOCControl1, e.x, e.y);  //RMenu1 右键菜单控件 
            }
        }
    }
}
主窗体Form1
namespace openAttributeTable
{
    public partial class frmAttr : Form
    {
        public frmAttr(IFeatureLayer pFt)
        {
            pFeatureLayer = pFt;
            InitializeComponent();
        }
        IFeatureLayer pFeatureLayer;
        private void frmAttr_Load(object sender, EventArgs e)
        {
            Itable2Dtable();
        }
        public void Itable2Dtable()
        {
            //获取显示的字段座位属性列
            dataAttributes.Rows.Clear();
            IFields pFields;
            pFields = pFeatureLayer.FeatureClass.Fields;
            dataAttributes.ColumnCount = pFields.FieldCount;
            for (int i = 0; i < pFields.FieldCount; i++)
            {

                string fldName = pFields.get_Field(i).Name;
                dataAttributes.Columns[i].Name = fldName;

                dataAttributes.Columns[i].ValueType = System.Type.GetType(ParseFieldType(pFields.get_Field(i).Type));
            }
            //查询出所有要素的属性并加入到dataview中
            IFeatureCursor pFeatureCursor;
            pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false);            
            IFeature pFeature;
            pFeature = pFeatureCursor.NextFeature();
            while (pFeature != null)
            {
                string[] fldValue = new string[pFields.FieldCount];

                for (int i = 0; i < pFields.FieldCount; i++)
                {
                    string fldName;
                    fldName = pFields.get_Field(i).Name;
                    if (fldName == pFeatureLayer.FeatureClass.ShapeFieldName)
                    {
                        fldValue[i] = Convert.ToString(pFeature.Shape.GeometryType);
                    }
                    else
                        fldValue[i] = Convert.ToString(pFeature.get_Value(i));
                }
                dataAttributes.Rows.Add(fldValue);
                pFeature = pFeatureCursor.NextFeature();               
            }        
        }
        /// <summary>
        /// 获取要素的类型
        /// </summary>
        /// <param name="TableFieldType"></param>
        /// <returns></returns>
        public static string ParseFieldType(esriFieldType TableFieldType)
        {

            switch (TableFieldType)
            {

                case esriFieldType.esriFieldTypeBlob:

                    return "System.String";

                case esriFieldType.esriFieldTypeDate:

                    return "System.DateTime";

                case esriFieldType.esriFieldTypeDouble:

                    return "System.Double";

                case esriFieldType.esriFieldTypeGeometry:

                    return "System.String";

                case esriFieldType.esriFieldTypeGlobalID:

                    return "System.String";

                case esriFieldType.esriFieldTypeGUID:

                    return "System.String";

                case esriFieldType.esriFieldTypeInteger:

                    return "System.Int32";

                case esriFieldType.esriFieldTypeOID:

                    return "System.String";

                case esriFieldType.esriFieldTypeRaster:

                    return "System.String";

                case esriFieldType.esriFieldTypeSingle:

                    return "System.Single";

                case esriFieldType.esriFieldTypeSmallInteger:

                    return "System.Int32";

                case esriFieldType.esriFieldTypeString:

                    return "System.String";

                default:

                    return "System.String";

            }
        }       
    }
}
打开属性表窗体frmAttr

 

posted @ 2018-06-03 16:23  ParanoiaApe  阅读(541)  评论(0)    收藏  举报