您的位置:首页 > 其它

打造自己地图AxTOCContrl树形控件——XUTocControl(成功解决节点控件拖拽问题)

2011-05-06 23:05 911 查看
   最近在搞应用于Windows平板电脑的系统开发,需要开发适用于平板电脑的地图控制控件取代ArcEngine自带的AxTOCContrl。

搞控件开发太费脑啦,需要注意的逻辑关系很复杂 都晕倒啦!

View Code

namespace GC_Controls

{

public partial class XUTocControl : UserControl

{

private ESRI.ArcGIS.Controls.AxMapControl _MapCtrl;

public XUTocControl()

{

InitializeComponent();

}

public XUTocControl(AxMapControl mapCtrl)

{

InitializeComponent();

_MapCtrl = mapCtrl;

InitTOC(mapCtrl.Map, this.MainBar);

}

/// <summary>

/// 初始化图层工具

/// </summary>

/// <param name="map"></param>

/// <param name="mainBar"></param>

private void InitTOC(IMap map,XUNaviBar mainBar)

{

MainBar.Text = map.Name;

//保存地图对象

MainBar.Tag = _MapCtrl;

for (int j = 0; j < map.LayerCount; j++)

{

ILayer2 pLayer = map.get_Layer(j) as ILayer2;

if (pLayer is ESRI.ArcGIS.Carto.IGroupLayer)

{

ICompositeLayer pCompositelayer;

pCompositelayer = (ICompositeLayer)pLayer;

XUNaviBar nvBar = new XUNaviBar(mainBar, pLayer);

nvBar.Tag = _MapCtrl;

int i= 0;

ILayer2 pLyr;

for (i = 0; i < pCompositelayer.Count; i++)

{

pLyr = pCompositelayer.get_Layer(i) as ILayer2;

XUBarNode tmpNode = new XUBarNode(nvBar, pLyr.Name, pLyr.Name);

//保存图层对象

tmpNode.Tag = pLyr;

nvBar.AddBarNode(tmpNode);

}

MainBar.AddBar(nvBar);

nvBar.Dock = DockStyle.Top;

}

else

{

XUBarNode tmpNode = new XUBarNode(mainBar, pLayer.Name, pLayer.Name);

//保存图层对象

tmpNode.Tag = pLayer;

MainBar.AddBarNode(tmpNode);

}

}

}

private void node_click(object sender, EventArgs e)

{

_MapCtrl.ActiveView.Refresh();

}

}

调用控件的示例代码:该控件使用时,需要ArcEngine 9.3 Runtime.

private void FormTest_Load(object sender, EventArgs e)

{

this.axMapControl1.LoadMxFile(Application.StartupPath + "\\geodata\tgwGD.mxd");

XUTocControl tocCtrl = new XUTocControl(this.axMapControl1);

this.panel1.Controls.Add(tocCtrl);

tocCtrl.Dock = DockStyle.Fill;

}

实现控件的节点拖拽功能参照了下列资料,在此表示感谢!

http://bbs.zbitedu.com/viewthread.php?tid=8711

http://www.cnblogs.com/ttc/archive/2008/08/21/1273172.html

http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124890.html

http://kb.cnblogs.com/a/1671126/

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop.aspx#Y6514

此外,WorldWind里也有拖拽文件功能WorldWind学习系列十六:3D Cross Section插件功能分析——TerrainViewer ,拖拽控件和拖拽文件本质上是一样的,只是拖拽控件是将控件作为数据用于传递而已。

本博客声明:本人的技术探索过程中,得到了国信司南公司方面支持。今后,本人博客里的所有技术探索成果将归“无痕客”、“国信司南”和“博客园”三方共同所有,原创作品如需转载,请注明本博客声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐