C#之WinForm程序设计-图片浏览器

Posted 十木禾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#之WinForm程序设计-图片浏览器相关的知识,希望对你有一定的参考价值。

C#WinForm程序设计之图片浏览器


这次我们一起做一个图片查看器,这个图片查看器的原始图如下:

我们首先来介绍一下这个原始图的构成:

左边上面是一个 TextBox 和 一个 Button,分别用来显示当前路径以及返回上一个路径。左边下面是一个浏览文件的文件路径树状图(TreeView),用来显示当前路径下的文件和文件夹。右边是一个pictureBox,用来展示选中的图片。

接下来我们一步一步实现这个图片查看器!

  1. 首先大家应该看到了左边的TreeView上面已经有显示当前PC的所有路径信息,那么是怎么做到的呢?
    方法很简单,就是先监听窗口的 Load 事件,代码如下:
        private void Form1_Load(object sender, EventArgs e)
        
            createDrivers();//调用下面的函数
        
        private void createDrivers()
        
            DirectoryInfo di;
            TreeNode tn;
            string s;
            foreach (string ss in Environment.GetLogicalDrives())
            
                /**
                 * ss的值形式如下:
                 * C:\\
                 * D:\\
                 * E:\\
                 * F:\\
                 * I:\\
                 */
                di = new DirectoryInfo(ss);                //生成路径
                if (di.Exists)                             //如果当前路径存在
                
                    s = ss.Substring(0, ss.IndexOf("\\\\")); //去掉路径的 \\ 得到如:C:
                    tn = new TreeNode(ss);                  //设置结点的值
                    tn.Tag = "Root";
                    treeView1.Nodes.Add(tn);               //把结点加入到TreeView中
                
            
        

接下来我们设置每个 Node 的点击事件,也就是监听 AfterSelect 事件:

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        
            TreeNode tn = e.Node; //得到发生选择事件的结点
            path = tn.FullPath;   //得到完整的路径 path是一个定义的全局变量
            textBox1.Text = path;  //在左上角的文本框显示完整的路径
            if (tn.Tag.ToString() == "File") //如果当前结点是文件
            
                string ext = path.Substring(path.LastIndexOf(".") + 1); //得到文件的后缀
                ext = ext.ToLower();
                if (ext == "ico" || ext == "gif" || ext == "jpg" || ext == "png" || ext == "bmp") //如果是图片,设置到右边的pictureBox
                    pictureBox1.Image = Image.FromFile(path);
                else  //否则使用系统默认的工具打开该文件
                    System.Diagnostics.Process.Start(path);
            
            else //反之当前结点是文件夹
            
                getSubContents(tn);//得到当前结点的全部内容
            
        

        private void getSubContents(TreeNode parent)
        
            DirectoryInfo di;
            TreeNode tn;
            di = new DirectoryInfo(parent.FullPath + "\\\\");  //得到路径
            if (!di.Exists) return;                          //路径不存在,直接返回
            foreach (DirectoryInfo d in di.GetDirectories()) //该路径下面的所有 文件夹
            
                tn = new TreeNode(d.Name);
                tn.Tag = "Directory";
                parent.Nodes.Add(tn);                        //将该节点添加到父节点
            
            foreach (FileInfo f in di.GetFiles())
            
                tn = new TreeNode(f.Name);                   //该路径下的所有 文件
                tn.Tag = "File";
                parent.Nodes.Add(tn);
            
            treeNode = parent;// 全局变量 记录当前结点
        

接下来我们运行一下看看效果(pictureBox的大小模式设置成Zoom)

你们有没有成功呢?

接下来就是实现那个 Back 按钮的回退功能了!

        private void button1_Click(object sender, EventArgs e)
        
            DirectoryInfo di = new DirectoryInfo(path + "\\\\");

            int p = path.LastIndexOf("\\\\");
            if (p >= 0)
            
                path = path.Substring(0, p);
                textBox1.Text = path;
                if (treeNode != null)                           //全局变量 当前选中的结点

                    treeNode.Nodes.Clear();                      //移除当前结点下的所有子节点
                    treeView1.SelectedNode = treeNode.Parent;    //设置他的父节点为当前选中结点
                
            
        

这样这个小项目就算完成了,是不是很轻松?项目下载地址【图片浏览器

以上是关于C#之WinForm程序设计-图片浏览器的主要内容,如果未能解决你的问题,请参考以下文章

C#在winform上画一张大于全屏的图片(至少3000*3000像素)。在窗口最大化下用鼠标拖动图片,必须画面流畅。

C#在winform上画一张大于全屏的图片(至少3000*3000像素)。在窗口最大化下用鼠标拖动图片,必须画面流畅。

C#在winform上画一张大于全屏的图片(至少3000*3000像素)。在窗口最大化下用鼠标拖动图片,必须画面流畅。

C#中 怎样在Winform窗体 右上角最小化左边添加一个按钮 ?像Q2013登录界面那种设置的按钮?

C# - 为啥全屏 Winform 应用程序不总是覆盖任务栏?

C# WinForm 如何动态添加控件和设计控件布局