http://bbs.bccn.net/thread-197567-1-1.html
/// <summary>
/// 已选中或取消选中树节点上的复选框时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void depDevTreeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode nodeEx = (TreeNode)e.Node;
if (nodeEx == null) return;
if (e.Action != TreeViewAction.Unknown)
{
SetNodeCheckStatus(nodeEx, nodeEx.Checked);
}
}
/// <summary>
/// 设置上下级节点的状态
/// </summary>
/// <param name="tn">当前点击的节点</param>
/// <param name="nodeExChecked">选中或取消的状态(true/false)</param>
private void SetNodeCheckStatus(TreeNode tn, bool nodeExChecked)
{
if (tn == null) return;
// Check children nodes
foreach (TreeNode tnChild in tn.Nodes)
{
tnChild.Checked = nodeExChecked;
SetNodeCheckStatus(tnChild, nodeExChecked);
}
// Set parent check status
TreeNode tnParent = tn;
int nNodeCount = 0;
while (tnParent.Parent != null)
{
tnParent = (TreeNode)(tnParent.Parent);
nNodeCount = 0;
foreach (TreeNode tnTemp in tnParent.Nodes)
if (tnTemp.Checked == nodeExChecked)
nNodeCount++;
if (nNodeCount == tnParent.Nodes.Count)
tnParent.Checked = nodeExChecked;
else
tnParent.Checked = false;
}
}
public string checknode = "";
/// <summary>
/// 获取所有选中的设备/通道值
/// </summary>
/// <param name="treeNodeCollection">节点对象集合</param>
/// <param name="strAllCheckedDeviceOrChannel">任务详细(对应需检测的设备/通道)</param>
private void GetAllCheckedDeviceOrChannel(TreeNodeCollection treeNodeCollection)
{
foreach (TreeNode tn in treeNodeCollection)
{
if (tn.Checked == true) //通道
{
checknode += tn.Tag + ",";
}
if (tn.Nodes.Count > 0)
{
//当存在子节点时,递归调用获取
GetAllCheckedDeviceOrChannel(tn.Nodes);
}
}
}