因为课题的缘故,翻出了以前写的一个ArcGIS Engine的例子,是在下拉框中显示一个图层的属性字段,当时把它做成了一个自定义控件,因为在开发UI的时候需要反复用到这个功能。做成之后要显示并返回选中图层的属性字段十分方便。
传入:IFeatureClass图层;传出:IField属性字段
最近仿照这个例子写了在下拉框中显示一个地图(IMap)满足过滤要求的图层(IFeatureClass或IRasterLayer)的自定义控件,功能比上面这个强大了些,可以做到基本的类型判断和通过OpenFileDialog对话框加载图层,以后有时间了再发布。
public partial class FieldsListCtrl : UserControl { #region class member private IFeatureClass featureclass; private IField selected_field = null; #endregion public FieldsListCtrl() { InitializeComponent(); } public IFeatureClass FeatureClass { get { return featureclass; } set { featureclass = value; if (null == featureclass) { return; } PopulateCombo(); } } public IField Selected_Filed { get { return selected_field; } set { selected_field = value; } } /// <summary> /// 在下拉框中显示除OBJECT和Shape之外的字段名 /// </summary> private void PopulateCombo() { if (null == featureclass) { return; } cmbFieldList.Items.Clear(); IFields pFields = featureclass.Fields; for (int i = 2; i < pFields.FieldCount; i++) { cmbFieldList.Items.Add(pFields.get_Field(i).AliasName); } } private void cmbFieldList_SelectedIndexChanged(object sender, EventArgs e) { IFields pFields = featureclass.Fields; for (int i = 2; i < pFields.FieldCount; i++) { if (cmbFieldList.SelectedItem.ToString() == pFields.get_Field(i).AliasName) { selected_field = pFields.get_Field(i); } } } }