|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
|
using System.Data;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
|
|
|
|
|
|
namespace GeoSigmaViewer
|
|
|
|
|
|
{
|
|
|
|
|
|
public delegate void NodeSelected(string layerName);
|
|
|
|
|
|
public partial class LayerTree : UserControl
|
|
|
|
|
|
{
|
|
|
|
|
|
public NodeSelected LayerSelectedEvent;
|
|
|
|
|
|
public Viewer DrawViewer { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
TreeNode currentNode = null;
|
|
|
|
|
|
Font fontDefault;
|
|
|
|
|
|
Font fontFocuse;
|
|
|
|
|
|
bool allChecked = false;
|
|
|
|
|
|
public int ID { get; set; }
|
|
|
|
|
|
public LayerTree()
|
|
|
|
|
|
{
|
|
|
|
|
|
System.Security.Cryptography.RNGCryptoServiceProvider csp = new System.Security.Cryptography.RNGCryptoServiceProvider();
|
|
|
|
|
|
byte[] byteCsp = new byte[10];
|
|
|
|
|
|
csp.GetBytes(byteCsp);
|
|
|
|
|
|
ID=BitConverter.ToInt32(byteCsp, 0);
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
|
|
fontDefault=DefaultFont;
|
|
|
|
|
|
fontFocuse=new Font("宋体", 9.0f, FontStyle.Bold|FontStyle.Underline);
|
|
|
|
|
|
|
|
|
|
|
|
//treeView.ShowLines=false;
|
|
|
|
|
|
//treeView.FullRowSelect=true;
|
|
|
|
|
|
}
|
|
|
|
|
|
private TreeNode FindNode(TreeNode tnParent, string strValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (tnParent==null) return null;
|
|
|
|
|
|
if (tnParent.FullPath==strValue) return tnParent;
|
|
|
|
|
|
TreeNode tnRet = null;
|
|
|
|
|
|
foreach (TreeNode tn in tnParent.Nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
tnRet=FindNode(tn, strValue);
|
|
|
|
|
|
if (tnRet!=null) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return tnRet;
|
|
|
|
|
|
}
|
|
|
|
|
|
private void Expand2Node(TreeNode node)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode tnParent = node.Parent;
|
|
|
|
|
|
if(tnParent !=null)
|
|
|
|
|
|
{
|
|
|
|
|
|
tnParent.Expand();
|
|
|
|
|
|
Expand2Node(tnParent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void SetCurrentLayer(string layerName)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode nodeFind = FindNode(treeView.Nodes[0], "图层\\"+layerName);
|
|
|
|
|
|
if (nodeFind==null) return;
|
|
|
|
|
|
|
|
|
|
|
|
if (currentNode!=null)
|
|
|
|
|
|
{
|
|
|
|
|
|
currentNode.NodeFont=fontDefault;
|
|
|
|
|
|
currentNode.ForeColor=Color.Black;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
currentNode=nodeFind;
|
|
|
|
|
|
currentNode.NodeFont=fontFocuse;
|
|
|
|
|
|
currentNode.ForeColor=Color.Red;
|
|
|
|
|
|
|
|
|
|
|
|
treeView.SelectedNode=currentNode;
|
|
|
|
|
|
|
|
|
|
|
|
Expand2Node(currentNode);
|
|
|
|
|
|
}
|
|
|
|
|
|
public void ResetLayers(string layers)
|
|
|
|
|
|
{
|
|
|
|
|
|
string[] saFullLayers = Regex.Split(layers, "\r\n");
|
|
|
|
|
|
Array.Reverse(saFullLayers);
|
|
|
|
|
|
treeView.Nodes.Clear();
|
|
|
|
|
|
treeView.ImageList=imlLayer;
|
|
|
|
|
|
TreeNode tnRoot = new TreeNode("图层");
|
|
|
|
|
|
tnRoot.Name=tnRoot.Text;
|
|
|
|
|
|
treeView.Nodes.Add(tnRoot);
|
|
|
|
|
|
foreach (string strLine in saFullLayers)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (strLine.Length==0) continue;
|
|
|
|
|
|
string[] saLayers = Regex.Split(strLine, @"\\");
|
|
|
|
|
|
FillLayerTree(tnRoot, saLayers, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
treeView.UnselectAll();
|
|
|
|
|
|
tnRoot.Expand();
|
|
|
|
|
|
}
|
|
|
|
|
|
private void FillLayerTree(TreeNode tnRoot, string[] saLayers, int startIndex)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = startIndex; i<saLayers.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
string strLayer = saLayers[i];
|
|
|
|
|
|
if (strLayer.Equals("Layer:"))
|
|
|
|
|
|
{ continue; }
|
|
|
|
|
|
int nFind = tnRoot.Nodes.IndexOfKey(strLayer);
|
|
|
|
|
|
if (nFind<0)
|
|
|
|
|
|
{
|
|
|
|
|
|
MakeFullNode(tnRoot, saLayers, i);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode tnFind = tnRoot.Nodes[nFind];
|
|
|
|
|
|
FillLayerTree(tnFind, saLayers, i+1);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 生成节点及其子节点
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="curNode"></param>
|
|
|
|
|
|
/// <param name="nodeNames"></param>
|
|
|
|
|
|
/// <param name="startIndex"></param>
|
|
|
|
|
|
private void MakeFullNode(TreeNode curNode, string[] nodeNames, int startIndex)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (startIndex<nodeNames.Length)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode tnChild = new TreeNode(nodeNames[startIndex]);
|
|
|
|
|
|
tnChild.Name=tnChild.Text;
|
|
|
|
|
|
tnChild.ImageIndex=0;
|
|
|
|
|
|
curNode.Nodes.Add(tnChild);
|
|
|
|
|
|
MakeFullNode(tnChild, nodeNames, startIndex+1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ActiveNode(e.Node);
|
|
|
|
|
|
//if (currentNode!=null)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// currentNode.NodeFont=fontDefault;
|
|
|
|
|
|
// currentNode.ForeColor=Color.Black;
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
//currentNode=e.Node;
|
|
|
|
|
|
//currentNode.NodeFont=fontFocuse;
|
|
|
|
|
|
//currentNode.ForeColor=Color.Red;
|
|
|
|
|
|
//string strLayerName = GetLayerName(e.Node);
|
|
|
|
|
|
//if (String.IsNullOrWhiteSpace(strLayerName)) return;
|
|
|
|
|
|
//DrawViewer.SetCurrentLayer(strLayerName);
|
|
|
|
|
|
}
|
|
|
|
|
|
private void ActiveNode(string layerName)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode nodeFind = FindNode(treeView.Nodes[0], "图层\\"+layerName);
|
|
|
|
|
|
if (nodeFind==null) return;
|
|
|
|
|
|
ActiveNode(nodeFind);
|
|
|
|
|
|
}
|
|
|
|
|
|
private void ActiveNode(TreeNode node)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (currentNode!=null)
|
|
|
|
|
|
{
|
|
|
|
|
|
currentNode.NodeFont=fontDefault;
|
|
|
|
|
|
currentNode.ForeColor=Color.Black;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
currentNode=node;
|
|
|
|
|
|
currentNode.NodeFont=fontFocuse;
|
|
|
|
|
|
currentNode.ForeColor=Color.Red;
|
|
|
|
|
|
treeView.SelectedNode=currentNode;
|
|
|
|
|
|
|
|
|
|
|
|
string strLayerName = GetLayerName(node);
|
|
|
|
|
|
if (String.IsNullOrWhiteSpace(strLayerName)) return;
|
|
|
|
|
|
DrawViewer.SetCurrentLayer(strLayerName);
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 可见可编辑
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
private void tsbViewEdit_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (treeView.Nodes.Count==0) return;
|
|
|
|
|
|
LayerStatus status = LayerStatus.VIEW_EDIT;
|
|
|
|
|
|
SetCheckedNodeStatus(treeView.Nodes[0], status);
|
|
|
|
|
|
DrawViewer.Redraw();
|
|
|
|
|
|
}
|
|
|
|
|
|
private void tsbViewNotEdit_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (treeView.Nodes.Count==0) return;
|
|
|
|
|
|
LayerStatus status = LayerStatus.VIEW_NOT_EDIT;
|
|
|
|
|
|
SetCheckedNodeStatus(treeView.Nodes[0], status);
|
|
|
|
|
|
DrawViewer.Redraw();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbNotViewNotEdit_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (treeView.Nodes.Count==0) return;
|
|
|
|
|
|
LayerStatus status = LayerStatus.NOT_VIEW_NOT_EDIT;
|
|
|
|
|
|
SetCheckedNodeStatus(treeView.Nodes[0], status);
|
|
|
|
|
|
DrawViewer.Redraw();
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置选中节点的状态
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="node"></param>
|
|
|
|
|
|
/// <param name="status"></param>
|
|
|
|
|
|
private void SetCheckedNodeStatus(TreeNode node, LayerStatus status)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (node==null) return;
|
|
|
|
|
|
if (node.GetCheckStatus()==1)
|
|
|
|
|
|
{
|
|
|
|
|
|
string strLayer = GetLayerName(node);
|
|
|
|
|
|
if (!String.IsNullOrWhiteSpace(strLayer))
|
|
|
|
|
|
{
|
|
|
|
|
|
DrawViewer.SetLayerState(strLayer, status);
|
|
|
|
|
|
SetNodeStatus(node, status);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach (TreeNode tn in node.Nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
SetCheckedNodeStatus(tn, status);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 选中指定状态的节点
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="node"></param>
|
|
|
|
|
|
/// <param name="status"></param>
|
|
|
|
|
|
private void CheckedNodeByStatus(TreeNode node, LayerStatus status)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (node==null) return;
|
|
|
|
|
|
if (status==GetNodestatus(node))
|
|
|
|
|
|
{
|
|
|
|
|
|
node.SetCheckStatus(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach (TreeNode tn in node.Nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
CheckedNodeByStatus(tn, status);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置节点状态标识
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="node"></param>
|
|
|
|
|
|
/// <param name="status"></param>
|
|
|
|
|
|
private void SetNodeStatus(TreeNode node, LayerStatus status)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(status ==LayerStatus.VIEW_EDIT)
|
|
|
|
|
|
{
|
|
|
|
|
|
node.ImageIndex=0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (status==LayerStatus.VIEW_NOT_EDIT)
|
|
|
|
|
|
{
|
|
|
|
|
|
node.ImageIndex=1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (status==LayerStatus.NOT_VIEW_NOT_EDIT)
|
|
|
|
|
|
{
|
|
|
|
|
|
node.ImageIndex=2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
node.ImageIndex=0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private LayerStatus GetNodestatus(TreeNode node)
|
|
|
|
|
|
{
|
|
|
|
|
|
LayerStatus status=0;
|
|
|
|
|
|
if (node.ImageIndex==0)
|
|
|
|
|
|
{
|
|
|
|
|
|
status=LayerStatus.VIEW_EDIT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (node.ImageIndex==1)
|
|
|
|
|
|
{
|
|
|
|
|
|
status=LayerStatus.VIEW_NOT_EDIT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (node.ImageIndex==2)
|
|
|
|
|
|
{
|
|
|
|
|
|
status=LayerStatus.NOT_VIEW_NOT_EDIT;
|
|
|
|
|
|
}
|
|
|
|
|
|
return status;
|
|
|
|
|
|
}
|
|
|
|
|
|
private string GetLayerName(TreeNode node)
|
|
|
|
|
|
{
|
|
|
|
|
|
string strLayerName = node.FullPath;
|
|
|
|
|
|
if (strLayerName.Length<3)
|
|
|
|
|
|
return null;
|
|
|
|
|
|
strLayerName="Layer:\\"+strLayerName.Remove(0, 3);
|
|
|
|
|
|
return strLayerName;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbCheckAll_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (allChecked==false)
|
|
|
|
|
|
{ treeView.SelectAll(); }
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
treeView.UnselectAll();
|
|
|
|
|
|
}
|
|
|
|
|
|
allChecked=!allChecked;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbCheckLock_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
treeView.UnselectAll();
|
|
|
|
|
|
CheckedNodeByStatus(treeView.Nodes[0], LayerStatus.VIEW_NOT_EDIT);
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbCheckUnlock_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
treeView.UnselectAll();
|
|
|
|
|
|
CheckedNodeByStatus(treeView.Nodes[0], LayerStatus.VIEW_EDIT);
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbCheckHide_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
treeView.UnselectAll();
|
|
|
|
|
|
CheckedNodeByStatus(treeView.Nodes[0], LayerStatus.NOT_VIEW_NOT_EDIT);
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void drpCheckAll_ButtonClick(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
tsbCheckAll_Click(sender, e);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tspAddChildNode_ButtonClick(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode tnParent = treeView.SelectedNode;
|
|
|
|
|
|
if (tnParent==null) return;
|
|
|
|
|
|
int i = 1;
|
|
|
|
|
|
string strNodeName = "新图层"+i;
|
|
|
|
|
|
TreeNode[] nodes= tnParent.Nodes.Find(strNodeName, false);
|
|
|
|
|
|
while (nodes!=null && nodes.Length>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
i++;
|
|
|
|
|
|
strNodeName ="新图层"+i;
|
|
|
|
|
|
nodes=tnParent.Nodes.Find(strNodeName, false);
|
|
|
|
|
|
}
|
|
|
|
|
|
AddNewNode(tnParent, strNodeName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbAddChildNode_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
tspAddChildNode_ButtonClick(sender, e);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void tsbAddNextNode_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (treeView.SelectedNode==null) return;
|
|
|
|
|
|
TreeNode tnParent = treeView.SelectedNode.Parent;
|
|
|
|
|
|
if (tnParent==null) return;
|
|
|
|
|
|
int i = 1;
|
|
|
|
|
|
string strNodeName = "新图层"+i;
|
|
|
|
|
|
TreeNode[] nodes = tnParent.Nodes.Find(strNodeName, false);
|
|
|
|
|
|
while (nodes!=null&&nodes.Length>0)
|
|
|
|
|
|
{
|
|
|
|
|
|
i++;
|
|
|
|
|
|
strNodeName="新图层"+i;
|
|
|
|
|
|
nodes=tnParent.Nodes.Find(strNodeName, false);
|
|
|
|
|
|
}
|
|
|
|
|
|
AddNewNode(tnParent, strNodeName);
|
|
|
|
|
|
}
|
|
|
|
|
|
private void AddNewNode(TreeNode parentNode, string nodeName)
|
|
|
|
|
|
{
|
|
|
|
|
|
TreeNode tnNew = new TreeNode(nodeName);
|
|
|
|
|
|
tnNew.Name=tnNew.Text;
|
|
|
|
|
|
tnNew.ImageIndex=0;
|
|
|
|
|
|
tnNew.SetCheckStatus(0);
|
|
|
|
|
|
parentNode.Nodes.Add(tnNew);
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
parentNode.Expand();
|
|
|
|
|
|
//treeView.SelectedNode=tnNew;
|
|
|
|
|
|
string strLayerName = GetLayerName(tnNew);
|
|
|
|
|
|
DrawViewer.FindAddLayer(strLayerName, false);
|
|
|
|
|
|
ActiveNode(tnNew);
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 删除选中图层
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
private void tspDeleteLayer_ButtonClick(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
//TreeNode node = treeView.SelectedNode;
|
|
|
|
|
|
// if (node==null) return;
|
|
|
|
|
|
List<TreeNode> lstNodes = new List<TreeNode>();
|
|
|
|
|
|
GetNodeByCheckStatus(treeView.Nodes[0], 1, lstNodes);
|
|
|
|
|
|
List<string> lstLayers = new List<string>();
|
|
|
|
|
|
foreach(TreeNode node in lstNodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
GetLayersWithChild(node, lstLayers);
|
|
|
|
|
|
}
|
|
|
|
|
|
DrawViewer.DeleteLayer(lstLayers);
|
|
|
|
|
|
foreach (TreeNode node in lstNodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
node.Remove();
|
|
|
|
|
|
}
|
|
|
|
|
|
treeView.UpdateView();
|
|
|
|
|
|
DrawViewer.Redraw();
|
|
|
|
|
|
|
|
|
|
|
|
string strCurLayer = DrawViewer.GetCurrentLayer();
|
|
|
|
|
|
ActiveNode(strCurLayer);
|
|
|
|
|
|
}
|
|
|
|
|
|
private void GetNodeByCheckStatus(TreeNode node, int checkStatus, List<TreeNode> nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (node==null) return;
|
|
|
|
|
|
if (node.GetCheckStatus()==(int)checkStatus)
|
|
|
|
|
|
{
|
|
|
|
|
|
nodes.Insert(0, node);
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach (TreeNode tn in node.Nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
GetNodeByCheckStatus(tn, checkStatus, nodes);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void GetLayersWithChild(TreeNode node, List<string> layerNames)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (node==null) return;
|
|
|
|
|
|
string strLayerName = GetLayerName(node);
|
|
|
|
|
|
if(!layerNames.Contains(strLayerName))
|
|
|
|
|
|
layerNames.Add(strLayerName);
|
|
|
|
|
|
foreach (TreeNode tn in node.Nodes)
|
|
|
|
|
|
{
|
|
|
|
|
|
GetLayersWithChild(tn, layerNames);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 反选
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
private void tsbCheckReverse_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
treeView.AntiSelect();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
string strName = GetLayerName(e.Node);
|
|
|
|
|
|
LayerSelectedEvent?.Invoke(strName);
|
|
|
|
|
|
//MessageBox.Show(strName);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|