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;
}