private void 增加ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataForm == null)
{
dataForm = new DataForm();
dataForm.DataPanelSelected += panelSelected;
dataForm.WindowState = FormWindowState.Maximized;
dataForm.MdiParent = this;
dataForm.Visible = true;
}
dataForm.AddDataPanel();
}
private void panelSelected(object sender, DataPanel panel)
{
if (treeView1.Nodes.Count > 0)
{
recursiveSelect(treeView1.Nodes[0], panel.CurveDescriptions);
}
}
private void recursiveSelect(TreeNode node, List<string> list)
{
if (list == null) return;
if (node.Nodes.Count == 0)
{
if (list.Contains(node.Text) && !node.Checked)
node.Checked = true;
else if (!list.Contains(node.Text) && node.Checked)
node.Checked = false;
}
else
{
foreach (TreeNode n in node.Nodes)
recursiveSelect(n, list);
}
}treeviewlist
{
if (dataForm == null)
{
dataForm = new DataForm();
dataForm.DataPanelSelected += panelSelected;
dataForm.WindowState = FormWindowState.Maximized;
dataForm.MdiParent = this;
dataForm.Visible = true;
}
dataForm.AddDataPanel();
}
private void panelSelected(object sender, DataPanel panel)
{
if (treeView1.Nodes.Count > 0)
{
recursiveSelect(treeView1.Nodes[0], panel.CurveDescriptions);
}
}
private void recursiveSelect(TreeNode node, List<string> list)
{
if (list == null) return;
if (node.Nodes.Count == 0)
{
if (list.Contains(node.Text) && !node.Checked)
node.Checked = true;
else if (!list.Contains(node.Text) && node.Checked)
node.Checked = false;
}
else
{
foreach (TreeNode n in node.Nodes)
recursiveSelect(n, list);
}
}treeviewlist
这个加载到某一个节点的列表
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
在此之后,dataForm.DataPanelSelected触发的时候,会自动调用panelSelected方法。List<string> list
这个定义了一个泛型列表集合,成员的类型是string,列表集合和数组类似,代表一些相同类型的元素构成的集合,和数组不同,往列表中添加元素更简单。这里用到了递归,所谓递归,就是在一个方法内又调用了自己。这个方法的作用是一层一层地选中树中的节点。
泛型集合 string是集合元素的类型
+= a+=b; 和a=a+b;是一样的。