257 lines
9.9 KiB
C#
257 lines
9.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Drawing;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using System.IO;
|
||
|
||
//自定义封装控件:
|
||
//(1)控件为成员【本代码使用此方法】:https://blog.csdn.net/wanlong360599336/article/details/7578447
|
||
//(2)继承控件:https://blog.csdn.net/aoshilang2249/article/details/41252781?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase
|
||
namespace TreeViewTc
|
||
{
|
||
public delegate void Delegate1(string vinfo);//申明委托类型:用于进度条的更新
|
||
|
||
public partial class TreeViewTc2 : UserControl
|
||
{
|
||
public TreeViewTc2()
|
||
{
|
||
InitializeComponent();
|
||
treeView1.ExpandAll();
|
||
//treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
|
||
|
||
//this.treeView1.ContextMenuStrip = this.contextMenuStrip1;//这行代码有问题:在控件treeView1任何位置鼠标右击都会显示右键菜单
|
||
}
|
||
|
||
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
|
||
{
|
||
if (e.Button != MouseButtons.Right) return;
|
||
if (e.Node.Parent == null || e.Node == null) return;
|
||
treeView1.SelectedNode = e.Node;
|
||
contextMenuStrip1.Show(treeView1, e.X, e.Y);
|
||
}
|
||
|
||
public event Delegate1 PlotSifEvent;//申明事件
|
||
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
|
||
{
|
||
if (e.Button != MouseButtons.Left) return;
|
||
if (e.Node.Parent == null || e.Node == null) return;
|
||
treeView1.SelectedNode = e.Node;
|
||
|
||
string nodeName = treeView1.SelectedNode.Name;
|
||
|
||
if (PlotSifEvent != null)
|
||
{
|
||
PlotSifEvent(nodeName);
|
||
}
|
||
}
|
||
|
||
private void TreeViewTc2_Load(object sender, EventArgs e)
|
||
{
|
||
////实例化TreeNode类 TreeNode(string text,int imageIndex,int selectImageIndex)
|
||
//TreeNode rootNode = new TreeNode("我的电脑"); //载入显示 选择显示
|
||
//rootNode.Tag = "我的电脑"; //树节点数据
|
||
//rootNode.Text = "我的电脑"; //树节点标签内容
|
||
//treeView1.Nodes.Add(rootNode); //树中添加根目录
|
||
|
||
////显示MyDocuments(我的文档)结点
|
||
//var myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取计算机我的文档文件夹
|
||
//TreeNode DocNode = new TreeNode(myDocuments);
|
||
//DocNode.Tag = "我的文档"; //设置结点名称
|
||
//DocNode.Text = "我的文档";
|
||
////DocNode.ImageIndex = IconIndexes.MyDocuments; //设置获取结点显示图片
|
||
////DocNode.SelectedImageIndex = IconIndexes.MyDocuments; //设置选择显示图片
|
||
//rootNode.Nodes.Add(DocNode); //rootNode目录下加载节点
|
||
//DocNode.Nodes.Add("");
|
||
|
||
////循环遍历计算机所有逻辑驱动器名称(盘符)
|
||
//foreach (string drive in Environment.GetLogicalDrives())
|
||
//{
|
||
// //实例化DriveInfo对象 命名空间System.IO
|
||
// var dir = new DriveInfo(drive);
|
||
// switch (dir.DriveType) //判断驱动器类型
|
||
// {
|
||
// case DriveType.Fixed: //仅取固定磁盘盘符 Removable-U盘
|
||
// {
|
||
// //Split仅获取盘符字母
|
||
// TreeNode tNode = new TreeNode(dir.Name.Split(':')[0]);
|
||
// tNode.Name = dir.Name;
|
||
// tNode.Tag = tNode.Name;
|
||
// //tNode.ImageIndex = IconIndexes.FixedDrive; //获取结点显示图片
|
||
// //tNode.SelectedImageIndex = IconIndexes.FixedDrive; //选择显示图片
|
||
// treeView1.Nodes.Add(tNode); //加载驱动节点
|
||
// tNode.Nodes.Add("");
|
||
// }
|
||
// break;
|
||
// }
|
||
//}
|
||
//rootNode.Expand();//展开树状视图
|
||
|
||
|
||
//string path = @"D:\Desktop\0easySifProject";
|
||
//Initialize(path);
|
||
}
|
||
|
||
private string mPath;
|
||
public void Initialize(string path)
|
||
{
|
||
string[] dics = Directory.GetDirectories(path);
|
||
foreach (string dic in dics)
|
||
{
|
||
if (dic.Contains("sifTmp"))
|
||
{
|
||
continue;
|
||
}
|
||
TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name);//实例化
|
||
subNode.Name = new DirectoryInfo(dic).FullName;//完整目录
|
||
subNode.Tag = subNode.Name;
|
||
treeView1.Nodes.Add(subNode);
|
||
subNode.Nodes.Add("");//加载空节点 实现+号
|
||
}
|
||
|
||
mPath = path;
|
||
}
|
||
|
||
public void reInitialize()
|
||
{
|
||
clearAll();
|
||
Initialize(mPath);
|
||
}
|
||
|
||
public void clearAll()
|
||
{
|
||
treeView1.Nodes.Clear();
|
||
}
|
||
|
||
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
public void AddRootNode(string NodeName)
|
||
{
|
||
//添加根节点
|
||
treeView1.Nodes.Add(NodeName.Trim());
|
||
}
|
||
|
||
private void btnAddSonNode_Click(string SonNodeName)
|
||
{
|
||
if (treeView1.SelectedNode == null)
|
||
{
|
||
MessageBox.Show("请选择要添加子节点的节点!");
|
||
return;
|
||
}
|
||
treeView1.SelectedNode.Nodes.Add(SonNodeName.Trim());
|
||
}
|
||
|
||
private void btnDelete_Click(object sender, EventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
|
||
{
|
||
e.Node.Expand();
|
||
}
|
||
|
||
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
|
||
{
|
||
TreeViewItems.Add(e.Node);
|
||
|
||
}
|
||
|
||
public event Delegate1 DeleteEvent;//申明事件
|
||
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
string nodeName = treeView1.SelectedNode.Name;
|
||
|
||
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||
{
|
||
if (DeleteEvent != null)
|
||
{
|
||
DeleteEvent(nodeName);
|
||
treeView1.SelectedNode.Remove();
|
||
}
|
||
}
|
||
}
|
||
|
||
private void treeView1_MouseUp(object sender, MouseEventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
public event Delegate1 SaveAsEvent;//申明事件
|
||
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
string nodeName = treeView1.SelectedNode.Name;
|
||
|
||
if (SaveAsEvent != null)
|
||
{
|
||
SaveAsEvent(nodeName);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
public static class TreeViewItems
|
||
{
|
||
public static void Add(TreeNode treeNode)
|
||
{
|
||
//try..catch异常处理
|
||
try
|
||
{
|
||
//判断"我的电脑"Tag 上面加载的该结点没指定其路径
|
||
if (treeNode.Tag.ToString() != "我的电脑")
|
||
{
|
||
treeNode.Nodes.Clear();//清除空节点再加载子节点
|
||
TreeNode tNode = treeNode;//获取选中\展开\折叠结点
|
||
string path = tNode.Name;//路径
|
||
|
||
//获取"我的文档"路径
|
||
if (treeNode.Tag.ToString() == "我的文档")
|
||
{
|
||
path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取计算机我的文档文件夹
|
||
}
|
||
|
||
//获取指定目录中的子目录名称并加载结点
|
||
string[] dics = Directory.GetDirectories(path);
|
||
foreach (string dic in dics)
|
||
{
|
||
TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name);//实例化
|
||
subNode.Name = new DirectoryInfo(dic).FullName;//完整目录
|
||
subNode.Tag = subNode.Name;
|
||
//subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片
|
||
//subNode.SelectedImageIndex = IconIndexes.OpenFolder;//选择节点显示图片
|
||
tNode.Nodes.Add(subNode);
|
||
subNode.Nodes.Add("");//加载空节点 实现+号
|
||
}
|
||
|
||
//获取目录中的文件
|
||
string[] files = Directory.GetFiles(path);
|
||
foreach (string file in files)
|
||
{
|
||
string[] nameTmp = file.Split('\\');
|
||
string name = nameTmp[nameTmp.Length - 1];
|
||
|
||
TreeNode subNode = new TreeNode(name);//实例化
|
||
subNode.Name = file;//完整目录
|
||
subNode.Tag = subNode.Name;
|
||
//subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片
|
||
//subNode.SelectedImageIndex = IconIndexes.OpenFolder;//选择节点显示图片
|
||
tNode.Nodes.Add(subNode);
|
||
}
|
||
}
|
||
}
|
||
catch (Exception msg)
|
||
{
|
||
MessageBox.Show(msg.Message);//异常处理
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|