Files
easySif/TreeViewTc/TreeViewTc2.cs

257 lines
9.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);//异常处理
}
}
}
}