期末数据结构大作业
程序主要分为以下六大功能:
一、创建及输出目录树;
通过创建树结构体,用顺序表或是链表来实现树的创建,获取需要进行分类的文件夹,先创建一棵空树,然后通过findfirstfile函数来递归遍历文件夹来创建树的结点;
二、查找结点;
通过输入需要查找文件的名称来定位查找到其对应的的路径;
三、添加结点;
在实际目录增加一个新的空文件夹,在树中创建一个新的结点;
四、删除结点
删除实际目录中的文件或文件夹,在树中删除结点;
五、复制/移动结点
实际目录中,复制/移动文件,树结构中复制/移动结点;
六、重命名结点
对实际目录和树结构中的名字属性进行重新命名。

设计初稿
初稿依照出现的六大功能制作了六个按钮,分别模拟点击动作,在下部分设计了树的展示区域,当中部选择了相应文件夹后,下部分展示区域会自动刷新展示出当前文件夹的文件树供用户查看,用户可以根据自己的需要选择上部分按钮对树进行操作,每次操作后即时更新下部分树。

最终稿

在进行实际开发后,对界面的布局进行进一步调整,并添加了更多的功能区来适配。以2.7.1.2为例,分为四个区进行讲解。
a、树创建及展示区
在②区点击“选择文件夹”,在弹出的弹窗选择相应文件夹后即可显示以下界面。

当选中树结点时,②区“所在地址”显示的是选中地址的绝对路径,会随着选中结点的不同而改变①区下部“选中结点”会展示出当前所选择结点的名字(含后缀名),这个区域的存在是为了重命名、删除、以及查找的输入更加方便。
④区的“展开目录”及“收起目录”点击可对展示的树进行一键展开所有树和收起树。
b、功能集中区

在①区,输入需要查找的子节点名称至“查找文件”文本框,点击确定,即可在树展示区对其定位(标色部分),此时可以点击标色部分,所在地址便会更新,可得到该文件夹的绝对路径。

①区中部对于不同的选择,输入框前的提示框会不同

对上述输入框输入相应的结点名称即可实现对应的操作,需要注意的是输入的名称都需要带上后缀名。
c、皮肤选择区

即可点击可一键换肤。
2.7.3 界面美化
使用使用IrisSkin2.dll来美化WinForm程序界面,进行部分功能适配然后添加相应的饮用以及文件即可实现。


主要使用了treeview、textbox、label、button控件。
部分代码

public Form1(){InitializeComponent();treeView1.AllowDrop = true;treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag);treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter);treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);}void treeView1_DragDrop(object sender, DragEventArgs e){TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");//根据鼠标坐标确定要移动到的目标节点Point pt;TreeNode targeNode;pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));targeNode = this.treeView1.GetNodeAt(pt);//如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端TreeNode NewMoveNode = (TreeNode)moveNode.Clone();if (targeNode.Nodes.Count == 0){targeNode.Parent.Nodes.Insert(targeNode.Index, NewMoveNode);}else{targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);}//更新当前拖动的节点选择treeView1.SelectedNode = NewMoveNode;//展开目标节点,便于显示拖放效果targeNode.Expand();//移除拖放的节点moveNode.Remove();}void treeView1_DragEnter(object sender, DragEventArgs e){if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode")){e.Effect = DragDropEffects.Move;}else{e.Effect = DragDropEffects.None;}}void treeView1_ItemDrag(object sender, ItemDragEventArgs e){if (e.Button == MouseButtons.Left){DoDragDrop(e.Item, DragDropEffects.Move);}}private void Form1_Load(object sender, EventArgs e){Sunisoft.IrisSkin.SkinEngine se = new Sunisoft.IrisSkin.SkinEngine();se.SkinAllForm = true;skinEngine1.SkinFile = "PageColor1.ssk";}private void PaintTreeView(TreeView treeView, string fullPath){try{treeView.Nodes.Clear(); //清空TreeViewDirectoryInfo dirs = new DirectoryInfo(fullPath); //获得程序所在路径的目录对象DirectoryInfo[] dir = dirs.GetDirectories();//获得目录下文件夹对象FileInfo[] file = dirs.GetFiles();//获得目录下文件对象int dircount = dir.Count();//获得文件夹对象数量int filecount = file.Count();//获得文件对象数量//循环文件夹for (int i = 0; i < dircount; i++){treeView.Nodes.Add(dir[i].Name);string pathNode = fullPath + "\\" + dir[i].Name;GetMultiNode(treeView.Nodes[i], pathNode);}//循环文件for (int j = 0; j < filecount; j++){treeView.Nodes.Add(file[j].Name);}}catch (Exception ex){MessageBox.Show(ex.Message + "\r\n出错的位置为:Form1.PaintTreeView()");}}private bool GetMultiNode(TreeNode treeNode, string path){if (Directory.Exists(path) == false){ return false; }DirectoryInfo dirs = new DirectoryInfo(path); //获得程序所在路径的目录对象DirectoryInfo[] dir = dirs.GetDirectories();//获得目录下文件夹对象FileInfo[] file = dirs.GetFiles();//获得目录下文件对象int dircount = dir.Count();//获得文件夹对象数量int filecount = file.Count();//获得文件对象数量int sumcount = dircount + filecount;if (sumcount == 0){ return false; }//循环文件夹for (int j = 0; j < dircount; j++){treeNode.Nodes.Add(dir[j].Name);string pathNodeB = path + "\\" + dir[j].Name;GetMultiNode(treeNode.Nodes[j], pathNodeB);}//循环文件for (int j = 0; j < filecount; j++){treeNode.Nodes.Add(file[j].Name);}return true;}private void button1_Click(object sender, EventArgs e){folderBrowserDialog1.Description = "请选择**文件夹";//folderBrowserDialog1.ShowNewFolderButton = true;//folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Personal;           if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){textBox1.Text = folderBrowserDialog1.SelectedPath;//MessageBox.Show(folderBrowserDialog1.SelectedPath);}string ss = folderBrowserDialog1.SelectedPath;filename = ss.ToCharArray();PaintTreeView(this.treeView1, folderBrowserDialog1.SelectedPath);}[StructLayout(LayoutKind.Sequential)]public struct TreeNode11{public int parent;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 300)]public char[] Name;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]public char[] path;public TreeNode11(int parent1){Name = new char[300];path = new char[100];parent = parent1;//双亲}}/*public struct PTree{public int r;public int n;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10000)]public char[] nodes;public PTree(int r,int n){nodes = new Tree[10000];//Tree nodes[10000];//存放树中所有结点int r, n;//根的位置下标和结点数}}*///[DllImport("DLL1.DLL")]//[DllImport("DLL1.DLL", EntryPoint = "fnAdd", CallingConvention = CallingConvention.Cdecl)]//public static extern int fnAdd(MyBuf mydata);//[DllImport("DLL1.DLL", EntryPoint = "SFiles", CallingConvention = CallingConvention.Cdecl)][DllImport("DLL1.DLL", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]private static extern IntPtr SFiles(char[] path, char[] targer);//unsafe static extern int letprinttreefile(char[] filename);//显示树的同时输入树//unsafe  static extern void letprinttreefile();//添加树//unsafe static extern char* SFiles(char* path, char* targer);//查找树private void textBox1_TextChanged(object sender, EventArgs e){}private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e){}string str;private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){str = "";TreeNode node = new TreeNode();node = treeView1.SelectedNode;string addadd = selectNodePath(treeView1, node);string c = new string(filename);addadd = addadd.Replace(@"/", @"\");textBox4.Text = c + @"\" + addadd;}/// <summary>/// 返回选中节点的完整路径/// </summary>/// <param name="treview">当前树</param>/// <param name="node1">当前的节点</param>/// <returns>完整路径</returns>private string selectNodePath(TreeView treview, TreeNode node1){TreeNode tn = new TreeNode();tn = node1.Parent;if (tn == null){str = str.Insert(0, node1.Text.ToString() + "/");}else{str = str.Insert(0, node1.Text.ToString() + "/");selectNodePath(treview, tn);}return str;}

操作视频
https://b23.tv/BV1kp4y1x7ui

C# winform制作文件分类管理器gui相关推荐

  1. Unity - 使用Winform制作简易登录器

    Unity - 使用Winform制作简易登录器 Resolution Dialog PC.Mac环境下,Unity提供了一个简易的设置分辨率.图形性能的对话框,叫Resolution Dialog, ...

  2. winform制作音乐播放器

    winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windo ...

  3. WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

    先看看传输使用界面的效果,可以选择发送和接收. 需要同一局域网的电脑先选择IP(IP能自动读取到)开启接收,注意这里需要自己更改一下文件名和存储格式,也可以不改传完再改,然后另一台电脑选择文件发送,之 ...

  4. java gui 读取文件夹_java Swing GUI 入门-文件读写器

    java Swing GUI 入门-文件读写器 觉得有用的话,欢迎一起讨论相互学习~ 首先创建一个独立的窗口 public CoupPad(){} public static void main(St ...

  5. 系统垃圾文件清理器 制作:China Doll (莫增成)

    @echo off ::修正于2018-10-06 color 4a Title 系统垃圾文件清理器 制作:China Doll (莫增成) echo. echo ================== ...

  6. 【从零开始制作 bt 下载器】一、了解 torrent 文件

    [从零开始制作 bt 下载器]一.了解 torrent 文件 写作背景 读取 torrent 文件 认识 bencode 使用 Python 解析 torrent 文件 解密 torrent 文件 结 ...

  7. 用Python制作简易播放器(电子钢琴) mac系统

    用Python制作简易播放器(电子钢琴) 开发环境:Python3.7 Mac OS 思路: 先根据需要设计GUI的样式,并思考需要定义什么功能 把功能写出来 把功能填入GUI之中 用曲子测试完整的程 ...

  8. python制作壁纸获取器exe,壁纸采集

    python制作壁纸获取器exe,壁纸采集 [为想学习爬虫的小白朋友分享的入门级代码,一键获取大量壁纸] sorry: 很久没更新了,因为参加了实训就紧接着去学车了(每天都是车少人多,最多练三次),最 ...

  9. 获取Windows 10上文件资源管理器的帮助

    Windows 10 no longer has built-in help for File Explorer, as Windows 7 does. Microsoft makes you sea ...

最新文章

  1. 表格中td限宽溢出以省略号代替
  2. 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform
  3. SSMS2008插件开发(3)--部署调试SSMS2008插件
  4. 【渝粤题库】陕西师范大学163204 旅游规划学
  5. go语言渐入佳境[6]-operator运算符
  6. 想宅家学习但实力不允许?9本书,揭秘学霸是如何养成的​
  7. what's the difference between atime, ctime and mtime
  8. JAVA我的世界给op_我的世界开服侠怎么给op 我的世界op指令合集
  9. 计算机中 位数越多 能表示的状态,第2章 基本数据的表示与处理.ppt
  10. OpenCV-离散傅里叶变换cv::dftcv::idft
  11. python flask接收图像
  12. sqlite简单笔记
  13. C语言求1000以内完数
  14. 在线html游戏翻译,怎么把整个英文网页游戏翻译成中文
  15. use mysql命令_mysql命令-use
  16. java数字转读音_java 数字转汉语读音的程序
  17. 【Allegro学习笔记】表面贴装封装设计过程——0603封装
  18. 超七成阅读APP都借百度语音技术促用户增长
  19. y yun m_yun是y---un 组成 ,还是y----ün组成
  20. 腾讯Techo开发者大会PPT分享

热门文章

  1. python输入姓名专业班级口号_口号标语之计算机专业班级口号
  2. 关于Java向上取整和向下取整(天花板函数)的说明
  3. 使用poi对excel条件格式设置字体颜色使用自定义的颜色
  4. Notepad++Plugin NPP_Export插件
  5. QTextEdit的几种高亮设置(选中文本、关键字)
  6. TypeScript入门指南(基础篇)
  7. LInux怎么配置php全局变量
  8. Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台
  9. Python 发送邮件时图片附件变为bin格式的解决方案
  10. Unity中实现虚拟摇杆