《1》TreeView树的基本操作 (创建了一个windows窗体应用程序 ,里面放了一个TreeView控件)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TreeView的使用
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//添加根节点
private void button2_Click(object sender, EventArgs e)
{
string nodeName = textBox1.Text;
int ll = nodeName.Length;
if (nodeName != null && nodeName.Length > 0)
{
//TreeNode表示一个节点对象,treeView1.Nodes.Add(nodeName)的返回值就是现在我们要添加的这个名字为nodeName节点。
TreeNode node = treeView1.Nodes.Add(nodeName);
}
else
{
MessageBox.Show("请设置节点名字!");
}
}
//添加子节点
private void button3_Click(object sender, EventArgs e)
{
string nodeName = textBox1.Text;
//获取用户选中的节点
TreeNode node = treeView1.SelectedNode;
if (node != null)
{
if (nodeName.Length > 0)
{
node.Nodes.Add(nodeName);
}
else
{
MessageBox.Show("请设置子节点的名字!");
}
}
else
{
MessageBox.Show("请选中要添加子节点的根节点!");
}
}
//清空所有节点
private void button1_Click(object sender, EventArgs e)
{
DialogResult dr= MessageBox.Show("你确定清空所有节点吗?","警告",MessageBoxButtons.YesNo);
if(dr.ToString()=="Yes")
{
treeView1.Nodes.Clear();
}
}
//删除选中节点
private void button4_Click(object sender, EventArgs e)
{
TreeNode node = treeView1.SelectedNode;
if (node != null)
{
treeView1.SelectedNode.Remove();
}
else
{
MessageBox.Show("请选择要删除的节点!");
}
}
//展开选中节点
private void button5_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
treeView1.SelectedNode.Expand();//Expand()方法:展开节点树
//treeView1.SelectedNode.ExpandAll(); //ExpandAll()方法:展开所有后代节点
}
else
{
MessageBox.Show("请选择要展开的节点!");
}
}
//关闭选中的“展开节点”
private void button6_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
treeView1.SelectedNode.Collapse(); //关闭展开的选中节点
}
else
{
MessageBox.Show("请选中要关闭的节点!");
}
}
}
}
《自己做一个文件查看器》
<pre class="csharp" name="code">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TreeView的使用
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
string nodePath = @"D:\jqeuryTest\jqueryTest";
LoadData(nodePath, treeView1.Nodes);
}
//-------------------------------------------------
//TreeNodeCollection类表示 System.Windows.Forms.TreeNode 对象的集合。即:TreeView节点的集合
public void LoadData(string path, TreeNodeCollection treeNodeCollection)
{
//1.获取指定目录下的所有子目录(直接子目录),并加载
string[] direPaths = Directory.GetDirectories(path);
foreach (var direPath in direPaths)
{
string direName = Path.GetFileName(direPath);//获取指定路径的文件名,其实这是里获取指定路径的文件夹的名称
//将具有指定标签文本的新树节点添加到当前树节点集合的末尾。返回值就是添加节点对象
TreeNode node = treeNodeCollection.Add(direName);
//最重要的点:使用递归,调用自己,但是这里的参数是v,这个direPath表示指定目录的一条子目录的路径,node.Nodes是当前节点。(具体意思就是添加路径为direPath的子目录到当前节点下。注意,每次自调用v,与node.Nodes的值都不一样哦)
LoadData(direPath, node.Nodes);
}
//-------------------------------------------------
//2.获取指定目录下的所有子文件(直接子文件)并加载
string[] files = Directory.GetFiles(path);
foreach (var file in files)
{
string fileName = Path.GetFileName(file);
TreeNode node = treeNodeCollection.Add(fileName);
node.Tag = file; //这一段是什么意思?其实很多控件都有Tag这个属性,这个Tag没有具体的用途,就是用来保存一些用户有需要的信息的。那现在我可以将指定目录下的的子文件的物理路径保存到这个节点Tag属性里面。这样,每个文件节点就都具有一个物理路径
};
}
//-------------------------------------------------
//打开这个TreeView的节点添加鼠标双击事件
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Tag != null) //在上面我给每个文件节点都设置了Tag属性,它的值是节点的物理路径
{
//按照e.Node.Tag这个路径找到文件,并按照Default格式读取他们,赋值给TextBox1控件
textBox1.Text = File.ReadAllText(e.Node.Tag.ToString(), Encoding.Default);
}
}
}
}