TreeView(竖节点控件)《笔记4》

时间:2022-09-22 12:39:46

TreeView随时更新
1、代码添加节点的方法:
TreeNode tn = new TreeNode(“子节点名称”);
TreeNode tn1 = new TreeNode(“父节点名称”,new TreeNode[ ] { tn } );
TreeView.Nodes.Add(tn1);

2、属性:
复选框设置:
TreeView.CheckBoxes = true;
TreeView.SelectedNode.Level 获取节点的深度!可以用来判断节点属于第几节的节点

3、TreeView在CSharp中定义的只有两种模式:
一种是已选中非选中两种。
TreeView.Checked = true/false;

如果要出现选中父节点,同时选中子节点需要重写TreeVies控件和CheckBox控件。

4、如何在TreeView中加入节点图标:
用存储控件(ImageList)存放需要的图像,在把ImageList赋值给TreeView.ImageList属性中。

Image im = image.FromFile("图像地址");
imageList1.Images.AddRange(new Image[]{im});
treeView1.ImageList = this.imageList1;

TreeNode tn0 = new TreeNode("子节点");
//获取当树节点处于**未选定**状态时所显示的图像列表索引值。
tn0.ImageIndex = 0;
//获取当树节点处于**选定**状态时所显示的图像列表索引值。
tn0.SelectedImageIndex = 0;

TreeNode tn1 = new TreeNode("父节点",new TreeNode[]{tn0});
tn1.ImageIndex = 0;
tn1.SelectedImageIndex = 0;
treeView1.Nodes.Add(th1);
.......
        //选中节点时候触发方法
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
SetChildChecked(e.Node);
}

//根据父节点输入子节点的状态
private void SetChildChecked(TreeNode childNode)
{
if (childNode.Checked)
{
//节点选中执行
for (int i = 0; i < childNode.GetNodeCount(false); i++)
{
TreeNode th = childNode.Nodes[i];
if (th.Checked != true)
{
th.Checked = true;
}
}
}
else
{
//节点未选中执行
for (int i = 0; i < childNode.GetNodeCount(false); i++)
{
TreeNode tn = childNode.Nodes[i];
tn.Checked = false;
}
}
}
        ///以下这段代码为**第三种选择模式**用于补充
/// <summary>
/// 根据子节点状态设置父节点的状态
/// </summary>
/// <param name="childNode"></param>
private void SetParentChecked(TreeNode childNode)
{
TreeNode parentNode = childNode.Parent;
if (!parentNode.Checked && childNode.Checked)
{
int ichecks = 0;
for (int i = 0; i < parentNode.GetNodeCount(false); i++)
{
TreeNode node = parentNode.Nodes[i];
if (node.Checked) { ichecks++; }
}
if (ichecks == parentNode.GetNodeCount(false))
{
parentNode.Checked = true;
if (parentNode.Parent != null)
{
SetParentChecked(parentNode);
}
}
}
else if(parentNode.Checked && !childNode.Checked)
{
parentNode.Checked = false;
}
}

/*————————————————

笔记代码如下(本人亲测):

public void ChuShiHuaJieDian()
{
TreeNode th11 = new TreeNode("一年级");//子树根
TreeNode th12 = new TreeNode("二年级");//子树根
TreeNode th13 = new TreeNode("三年级");//子树根
TreeNode th14 = new TreeNode("四年级");//子树根
TreeNode th15 = new TreeNode("五年级");//子树根
TreeNode th16 = new TreeNode("六年级");//子树根
TreeNode th1 = new TreeNode("小学", new TreeNode[] { th11, th12, th13, th14, th15, th16 });//根树根,根目录包含了子目录
treeView1.Nodes.Add(th1);

TreeNode th21 = new TreeNode("七年级");
TreeNode th22 = new TreeNode("八年级");
TreeNode th23 = new TreeNode("九年级");
TreeNode th2 = new TreeNode("中学", new TreeNode[] { th21, th22, th23 });
treeView1.Nodes.Add(th2);

TreeNode th34 = new TreeNode("高一");
TreeNode th35 = new TreeNode("高二");
TreeNode th36 = new TreeNode("高三");
TreeNode th3 = new TreeNode("高中", new TreeNode[] { th34, th35, th36 });
treeView1.Nodes.Add(th3);

TreeNode th47 = new TreeNode("大一");
TreeNode th48 = new TreeNode("大二");
TreeNode th49 = new TreeNode("大三");
TreeNode th4 = new TreeNode("大学", new TreeNode[] { th47, th48, th49 });
treeView1.Nodes.Add(th4);
}

private void Form1_Load(object sender, EventArgs e)
{
ChuShiHuaJieDian();
}

private void button1_Click(object sender, EventArgs e)//添加根节点
{
if (textBox1.Text != "")
{
TreeNode tn = new TreeNode(textBox1.Text.Trim());
//声明一个根节点
treeView1.Nodes.Add(tn);
//添加
}
else
{
MessageBox.Show("文件夹名称为空,不可创建新的文件夹");
}

}

private void button2_Click(object sender, EventArgs e)//删除根节点
{
TreeNode th = new TreeNode();
th = treeView1.SelectedNode;
//声明一个节点,保存已经选中的节点
if (th.Nodes.Count > 0)//查看该节点是否有子节点
{
DialogResult dr = MessageBox.Show("当前所选择的文件夹中有子文件夹,是否继续进行删除","删除窗口",MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
th.Remove();
}

}
}

private void button3_Click(object sender, EventArgs e)//无限添加子节点
{
TreeNode tn1 = new TreeNode(textBox1.Text);//子节点
//声明一个节点,作为新开辟的节点空间
TreeNode tn = new TreeNode();//根节点
tn = treeView1.SelectedNode;
//声明一个节点,保存当前选中的节点
if (tn.Checked == true)
{
tn = treeView1.SelectedNode.Nodes.Add(tn1.Text);
//获得当前选中的节点,“此节点集合中”添加“新的子节点”
}
}

private void button4_Click(object sender, EventArgs e)//无限删除子节点
{
TreeNode tn = new TreeNode();
tn = treeView1.SelectedNode;
//声明一个节点,获取选中的节点
if (tn != null && tn.Checked == true && tn.Nodes.Count == 0)
{//tn不为空并且选定的并且tn没包含有子节点
tn.Remove();
}
else
{
DialogResult dr = MessageBox.Show("当前文件夹中包含文件夹,是否删除", "删除窗口", MessageBoxButtons.YesNo);
if(dr == DialogResult.Yes)
{
tn.Remove();
}
}
}

个人倾述(不针对任何人):
别为自己的懒惰,找任何理由。
最近总听到有朋友说:命不好,命运是枷锁。
我本人很反感这些,自己不付出努力,总为自己的不成功找借口。即使你命好,别人想给你机会。但我很想问一句:你到底会做什么?你口中所说的自己真那么厉害?那么你现在为何还在抱怨?
只有你自己放弃自己,没有人能放弃你自己。