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();
}
}
}
}
①需要涉及到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();
}
}
}
}
相关文章推荐
- TocControl图层控件不显示图层的问题
- AE+C#开发问题之二——axTOCControl控件图层不显示问题
- AE实现右键点击TOC控件任意图层显示属性表
- AE实现右键点击TOC控件任意图层显示属性表
- VS2008显示并调整各个控件的Tab顺序
- C# WinForm控件之Dock控件调整先后顺序
- C#窗口控件Dock的位置顺序调整方法
- 深入分析C#中WinForm控件之Dock顺序调整的详解
- c#tabcontrol控件选项卡竖直显示,上面的文字水平显示
- 分级渲染图层后更新TOC控件显示效果
- C# 窗口控件Dock的位置顺序调整方法
- c#TabControl控件左边选项卡左边显示,文字横向显示
- C# WinForm控件之Dock顺序调整
- c#TabControl控件左边选项卡左边显示,文字横向显示
- ae+C#实现图层管理控件上的图层移动功能
- AE:控件TOCControl右击
- C# WinForm控件之Dock先后顺序调整
- VS2005显示所有控件Tab顺序以及调整的方法
- C# 控制控件的显示顺序
- ArcgisEngine+C#开发中,对一个图层进行过滤,并只显示符合条件的要素