TOCControl非常好,不用写一行代码就可以将整个地图的图层信息况显示出来;
TOCControl也非常坏,提供的接口非常少,我认为有用的只有三个:HitTest,SetBuddyControl,Update,而且Update方法一执行,整个TocControl就会重新装载一次,闪烁很厉害,实在是让人烦。要想在TOCControl中拖动图层,也并不容易,得动一动脑筋才行。
下面是我写的一个类,用于实现拖动图层,有需要的朋友,可以复制过去了,看一看。
需要说明的是,该类需要传入一个System.Windows.Forms.Control作为移动图层时显示要移到的位置,所以,在TOCControl上最好上一个Panel,然后传入到TocHelper中。另外,在计算同m_MovingLine显示的位置时,偶没找到什么好办法,只好设置了一个行高的参数。在正常字体时,据我的经验,行高是16,在Windows大字体显示时,行高是18,可以精确的显示。但这毕竟不是一个好办法。哪位高人要是看到了这个帖子,也请指点小弟一二,感激不尽!
publicclassTocHelper
{
privateESRI.ArcGIS.TOCControl.AxTOCControlm_toc;
privateILayerm_layer=null;
privateobjectm_other,m_index;
privateLayerPopmenum_LyMenu;
privateDataFramePopmenum_FrameMenu=newDataFramePopmenu();
publiceventCurrentLayerChangedHandlerCurrentLayerChanged;
privateboolm_Dragging=false;
privateSystem.Windows.Forms.Controlm_MovingLine;//=newSystem.Windows.Forms.Panel();
publicTocHelper(ESRI.ArcGIS.TOCControl.AxTOCControltoc)
{
m_toc=toc;
m_LyMenu=newLayerPopmenu(this);
m_LyMenu.TOCControl=m_toc;
m_FrameMenu.TOCControl=m_toc;
m_toc.LabelEdit=esriTOCControlEdit.esriTOCControlManual;
/**////处理事件
m_toc.OnMouseDown+=newITOCControlEvents_OnMouseDownEventHandler(m_toc_OnMouseDown);
m_toc.OnMouseMove+=newITOCControlEvents_OnMouseMoveEventHandler(m_toc_OnMouseMove);
m_toc.OnMouseUp+=newITOCControlEvents_OnMouseUpEventHandler(m_toc_OnMouseUp);
m_toc.OnBeginLabelEdit+=newITOCControlEvents_OnBeginLabelEditEventHandler(m_toc_OnBeginLabelEdit);
m_toc.OnEndLabelEdit+=newITOCControlEvents_OnEndLabelEditEventHandler(m_toc_OnEndLabelEdit);
}
publicvoidSetMoveLine(System.Windows.Forms.Controlline)
{
m_