您的位置:首页 > 编程语言 > C#

C#+AE 调整TOCControl控件中图层的显示顺序

2012-10-11 16:16 519 查看
基本思路如下:利用鼠标左键将需要调整顺序的图层移动至目标位置。

①需要涉及到TOCControl的OnMouseDown事件来获取要调整的图层,

②OnMouseUp事件获得目标图层和索引号,

③再利用IMap提供的MoveLayer方法,将相应调整axMapControl中的图层的显示顺序。

④最后使用TOCControl的Update方法来更新TOCControl控件中的显示顺序;

具体实现代码如下:

//全局变量
public ITOCControl mTOCControl;
public ILayer pMoveLayer;//需要被调整的图层;
public int toIndex;//将要调整到的目标图层的索引;

//窗体加载

private void Form1_Load(object sender, EventArgs e)
{

this.axTOCControl1.SetBuddyControl(this.axMapControl1);
mTOCControl=this.axTOCControl1.Object as ITOCControl;
}

//TOCControl控件的OnMouseDown事件,获得需要被调整的图层

private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
{
esriTOCControlItem item=esriTOCControlItem.esriTOCControlItemNone;
if (e.button == 1)
{
IBasicMap map = null;
ILayer layer = null;
object other = null;
object index = null;

mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
if (item == esriTOCControlItem.esriTOCControlItemLayer)
{
if(layer is IAnnotationSublayer)
{
return;
}
else
{
pMoveLayer = layer;
}
}

}
}

//TOCControl控件的OnMouseUp事件,获得目标图层及索引

//并实现axMapControl中视图显示的索引的变化,并更新TOCControl控件中的显示顺序

private void axTOCControl1_OnMouseUp(object sender, ITOCControlEvents_OnMouseUpEvent e)
{
if (e.button == 1)
{
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
IBasicMap map = null;
ILayer layer = null;
object other = null;
object index = null;

mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
IMap pMap = this.axMapControl1.ActiveView.FocusMap;
if(item==esriTOCControlItem.esriTOCControlItemLayer||layer!=null)
{
if (pMoveLayer != null)
{
ILayer pTempLayer;
for (int i = 0; i < pMap.LayerCount; i++)
{
pTempLayer = pMap.get_Layer(i);
if (pTempLayer == layer)
{
toIndex = i;
}
}
pMap.MoveLayer(pMoveLayer,toIndex);
axMapControl1.ActiveView.Refresh();
mTOCControl.Update();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: