简单的本地图片查看器

目录

前言

1.窗体布局

2.迭代搜索和添加treeviewer节点

3.显示细节

1.显示模式修改

2.实现选中节点显示对应图片

3.实现“下一张”、“上一张”功能

4.结束语


前言

       是因是图片很多,默认的查看器不能“下一张”到另一个文件夹,又不想安装其他的图片浏览器,就决定实现一个简单一点的。

        注意:这个查看器只适用于一个根目录下存在若干目录和图片,然后全部解构成一层目录,会丢失原始目录的层级关系。

1.窗体布局

2.迭代搜索和添加treeviewer节点

        利用面向对象的继承特性,使用递归,查找目标目录下所有文件夹和目录,同时添加treeviewer节点。

private void browseFiles(FileSystemInfo info)
        {
            if (!info.Exists)
                return;
            DirectoryInfo dir = info as DirectoryInfo;
            //不是目录
            if (dir == null) 
                return;
            FileSystemInfo[] files = dir.GetFileSystemInfos();
            var rootNode = treeView1.Nodes.Add(dir.Name);
            rootNode.Tag = string.Empty;
            foreach(var tmp in files)
            {
                FileInfo file = tmp as FileInfo;
                if (file != null)
                {
                    if (!file.Name.EndsWith(".gif") &&
                        !file.Name.EndsWith(".jpg") && 
                        !file.Name.EndsWith(".png") &&
                        !file.Name.EndsWith(".bmp") &&
                        !file.Name.EndsWith(".ico")
                        )
                        return;
                    //加入列表
                    var chd = rootNode.Nodes.Add(file.Name);
                    chd.Tag = file.FullName;    
                }
                else
                {
                    browseFiles(tmp);
                }
            }
        }

3.显示细节

1.显示模式修改

        由于一些图片可能由于分辨率过大导致显示不全,所以要提供图像显示模式的修改功能。无非是修改PictureBox的PictureBoxSizeMode属性,要注意的是修改后需要刷新控件,不然显示模式还是不会更改,例如:

private void 缩放ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            image.SizeMode = PictureBoxSizeMode.Zoom;
            image.Refresh();
        }

2.实现选中节点显示对应图片

        注意的是要使用level属性区分子目录与父目录(这里只有两层,很好区分);在上一步检索图片的时候,图像路径保存在Tag属性中。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            var node = e.Node;
            if (node.Level == 1) //子节点
            {
                String img = node.Tag.ToString();
                label1.Text = img;
                image.Load(img);
            }
        }

3.实现“下一张”、“上一张”功能

        以“上一张”为例,由于目录结构只有一层,所以只要考虑在子目录和父目录两种情况就行了(感觉我的实现方法比较菜)。

        “下一张”与此类似。

private void 上一张ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ///*******************
            ///folder1
            ///       |
            ///       img1
            ///       |
            ///       img2
            ///|
            ///folder2
            ///        |
            ///        img2
            ///|
            ///folder3
            ///        |
            ///        img3
            if (treeView1.SelectedNode == null)
                return;
            //获取当前选中节点
            var cnode = treeView1.SelectedNode;
            //如果到头了,直接返回
            if (cnode.Index == 0) //已到达顶部
            {
                if(cnode.Parent != null) //存在父节点,说明是叶子节点
                {
                    if (cnode.Parent.Index == 0) //父节点也到顶了
                        return;
                    //否则选中父节点的上一个兄弟节点
                    selectTreeNode(treeView1.Nodes[cnode.Parent.Index - 1]);
                }
                else
                {
                    return;
                }
            }
            else //未到达顶部
            {
                //选中上一个兄弟节点
                selectTreeNode(cnode.Parent.Nodes[cnode.Index - 1]);
            }
        }

4.结束语

        可改进的地方:

  1. 在递归的时候,根据相对位置,还原目录原始层级;
  2. 相应的,“上、下”功能也要修改,修改的点就在treeview要改成对应的父目录;
  3. 添加按名称搜索功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值