ArcEngine C# 选择对象、取消选择、设置可选图层

//全局变量



public enum enumToolFlag

{

Select

}

IEnumFeature globalEnumFeature; // 选中要素集全局变量



private void btnSelect_Click(object sender, EventArgs e) //选择对象

{

axMapControlMain.MousePointer= esriControlsMousePointer.esriPointerDefault;

flag = enumToolFlag.Select;

}



在axMapControl1_OnMouseDown中写如下代码:





Switch (flag)

{

case enumToolFlag.Select: //选择元素

{

//选择要素

IGeometry pGeometry = axMapControlMain.TrackRectangle();

IEnvelope pEnv;

IActiveView pActiveView = axMapControlMain.ActiveView;

//IMap pMap = axMapControlMain.Map;

pEnv = pGeometry as IEnvelope;

if (pEnv.IsEmpty == true)

{

ESRI.ArcGIS.Display.tagRECT r;

r.bottom = e.y + 5;

r.top = e.y - 5;

r.left = e.x - 5;

r.right = e.x + 5;

pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4);

pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;

pGeometry = pEnv as IGeometry;

}

axMapControlMain.Map.ClearSelection();

axMapControlMain.Refresh();

axMapControlMain.Map.SelectByShape(pGeometry, null, false);

axMapControlMain.Refresh();



//获取选中要素

IMap pMap = axMapControlMain.Map;

globalEnumFeature = axMapControlMain.Map.FeatureSelection as IEnumFeature;

globalEnumFeature.Reset();



}

break;

}



取消选择:

private void btnClearSelect_Click(object sender, EventArgs e) //取消选择

{

axMapControlMain.MousePointer= esriControlsMousePointer.esriPointerDefault;

axMapControlMain.Map.ClearSelection();

axMapControlMain.Refresh();

}

设置可选图层:

//全局变量中添加

string selectedlayerName; // 选择图层名



private void btnSetSelectLayer_Click(object sender, EventArgs e)

{

try

{

//初始设置所有图层不可选

ILayer iLayer;

IFeatureLayer iFeatureLayer;

for (int i = 0; i < https://www.360docs.net/doc/0113268645.html,yerCount; i++)

{

iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);

iFeatureLayer = (IFeatureLayer)iLayer;

iFeatureLayer.Selectable = false;

}



frmSetSelectLayer selectLayerFrm;

selectLayerFrm = new frmSetSelectLayer(axMapControlMain);

selectLayerFrm.ShowDialog();

selectedlayerName = selectLayerFrm

.selectedLayerName;

if (selectedlayerName == null) return;

if (selectedlayerName == "所有图层")

{

for (int i = 0; i < https://www.360docs.net/doc/0113268645.html,yerCount; i++)

{

iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);

iFeatureLayer = (IFeatureLayer)iLayer;

iFeatureLayer.Selectable = true;

}

}

else

{

iLayer = Tool.GetLayerByName(selectedlayerName, axMapControlMain);

iFeatureLayer = (IFeatureLayer)iLayer;

iFeatureLayer.Selectable = true;

}

}

catch (Exception ex)

{

MessageBoxEx.Show(ex.ToString());

}

}

GetLayerByName函数:

public static ILayer GetLayerByName(string strLyrName, AxMapControl axMapControlMain)

{

ILayer pLayer = null;

bool bFindLayer = false;

for (int i = 0; i < https://www.360docs.net/doc/0113268645.html,yerCount; i++)

{

pLayer = axMapControlMain.Map.get_Layer(i);

if (pLayer is IGroupLayer || pLayer is ICompositeLayer)

{

ICompositeLayer pComLyr = pLayer as ICompositeLayer;

for (int j = 0; j < pComLyr.Count; j++)

{

pLayer = pComLyr.get_Layer(j);

if (https://www.360docs.net/doc/0113268645.html,.Equals(strLyrName))

{

bFindLayer = true;

break;

}

else

{

pLayer = null;

}

}

}

else

{

if (https://www.360docs.net/doc/0113268645.html, == strLyrName)

{

bFindLayer = true;

}

else

{

pLayer = null;

}

}

if (bFindLayer)

{

break;

}

}

return pLayer;

}

相关文档
最新文档