我正在努力思考我认为应该是我的Treeview的基本递归,但我似乎无法使逻辑正确。
基本上我有一个WinForms Treeview(C#Net Framework 4.5.1),它有一个节点列表,这些节点是标准节点(没有自定义控件),每个节点都启用了复选框。
它是一个动态树视图,因此节点不是固定长度的深度,但基本上可以有任意数量的子节点,也可以有更多的子节点(希望这是有意义的。)
我想要实现的是返回顶级已检查节点,如果所有子节点都被选中,或者如果没有选中所有子节点,则返回已检查节点列表。
以下是一些例子: -
此示例将返回节点1,因为它的所有子节点(和后续子节点)都已被检查
这将返回节点1 /节点2 /节点3 /节点5
这将返回节点1 /节点2 /节点5
这将返回节点1 /节点2 /节点4 /节点5 /节点7
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:0)
Deacon Kelly,您可以使用此方法。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestingApplication
{
public partial class frmTreeView : Form
{
TreeView tr = new TreeView();
TreeNode tn = new TreeNode();
TreeNode tn1 = new TreeNode();
public frmTreeView()
{
InitializeComponent();
}
private void frmTreeView_Load(object sender, EventArgs e)
{
tr.CheckBoxes = true;
tn.Text = "fruit";
tn1.Text = "snack";
tn1.Nodes.Add("meat");
tn1.Nodes.Add("other");
tn.Nodes.Add("apple");
tn.Nodes.Add("orange");
this.tr.Nodes.Add(tn);
this.tn.Nodes.Add(tn1);
this.Controls.Add(tr);
this.tr.NodeMouseClick += new TreeNodeMouseClickEventHandler(tr_NodeMouseClick);
}
private void tr_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode clickedNode = e.Node;
if (clickedNode.Checked)
{
if (clickedNode.Text.Equals("apple"))
{
MessageBox.Show("you checked" + clickedNode.Text + "");
}
else if (clickedNode.Text.Equals("orange"))
{
MessageBox.Show("you checked" + clickedNode.Text + "");
}
}
}
}
}