A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 覃庆健 中级黑马   /  2013-5-1 23:22  /  1914 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 覃庆健 于 2013-5-2 16:19 编辑

问题:  这个是我前不久做的图片查看器的打开文件夹部分,  今天才想起还有疑问没解决,

          从目录中提取文件名到listBox中, 下面的代码是正确的,
          但是在listbox中显示的是"路径名+文件名" , 我现在只要显示文件名,怎么做呢?
          我写的代码中只有3.号能显示图片,但是列表框中显示的是路径和文件名一起,
          其他1 和 2 虽然能取得文件名,但是点击listbox的文件名就报错

代码如下, 大家可以试试~~求帮忙, 了却疑问 , 3Q {:soso_e183:}
  1.   
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 覃庆健 于 2013-5-1 23:27 编辑
  1.         private void btn_Openpic_Click(object sender, EventArgs e)
  2.         {   //打开文件目录
  3.             //打开目录的控件folderBrowserDialog
  4.             //选中目录 点开文件
  5.             // 暂时不考虑文件夹中的文件类型,默认只有jpg图片文件


  6.             if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)//显示对话框 如果点了确定
  7.             {

  8.                 listBox_Mulu.Items.Clear(); //重选目录则清空目录
  9.                 string path = folderBrowserDialog1.SelectedPath; //取得选中的文件夹的路径               

  10.                 //为什么用文件流会报错文件不存在 .. 我只要文件名 不要路径啊!!!!!!!!!!!!!!!
  11.                 //---- 1. 代码正确 但是点击显示图片则报错
  12.                 //DirectoryInfo mulu = new DirectoryInfo(path); //返回目录路径
  13.                 //FileInfo[] files = mulu.GetFiles(); //获取目录中的文件
  14.                 //foreach (FileInfo temp in files)
  15.                 //{
  16.                 //    listBox_Mulu.Items.Add(temp.Name); //循环添加文件名到列表框
  17.                 //}

  18.                 //---- 2. 同上
  19.                 //DirectoryInfo mulu = new DirectoryInfo(path); //返回目录路径
  20.                 //FileInfo[] files = mulu.GetFiles(); //只获取目录中的文件名
  21.                 //listBox_Mulu.Items.AddRange(files); //添加所有文件名到列表框

  22.                 //---- 3.  在用
  23.                 string[] files = System.IO.Directory.GetFiles(path); //返回指定路径指向的文件名+路径名到字符串数组中
  24.                 foreach (string temp in files)
  25.                 {
  26.                     listBox_Mulu.Items.Add(temp);
  27.                 }
  28.             }
  29.         }

  30.         private void listBox_Mulu_SelectedIndexChanged(object sender, EventArgs e)
  31.         {//点击文件目录列表框的文件名              
  32.             try   
  33.             {
  34.                 if (listBox_Mulu.SelectedItem != null) //如果选定了的文件不为空
  35.                 {              
  36.                     Image showPicture;  //定义Image类的实例
  37.                     showPicture = (Bitmap)Image.FromFile(listBox_Mulu.SelectedItem.ToString()); //从当前选定的列表框的项创建新的Image
  38.                     picBox_Show.SizeMode = PictureBoxSizeMode.Zoom;  //picBox中的图像显示方式为zoom
  39.                     picBox_Show.Image = showPicture; //将新建的图像在picBox中显示
  40.                 }
  41.             }
  42.             catch (Exception ex)
  43.             {
  44.                 MessageBox.Show("错误" + ex.Message);
  45.             }
  46.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
1、使用Directory的GetFile函数时,需要自己做出一个方法,来获得图片文件的名字。比如:.jpg文件格式,文件路径c:\1.jpg,存储在path中,我们可以在方法中先判断path的最后几个字符是否是.jpg,然后再从后查找第一个'\'字符,得到这个'\'字符的位置后,就可以使用subString来获得当前文件名,而不包含路径。当然如此不太方便。
2、直接使用DirectoryInfo的GetFile函数,并配以FileInfo结构来存储文件名,FileInfo的好处就在于我们可以很方便的操纵文件,比如获得全路径、文件名等。此例使用较合适。
3、修改后代码如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;

  10. namespace WindowsFormsApplication1
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         DirectoryInfo di;
  15.         FileInfo[] files;

  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }

  20.         private void listBox_Mulu_SelectedIndexChanged(object sender, EventArgs e)
  21.         {
  22.             //点击文件目录列表框的文件名              
  23.             try
  24.             {
  25.                 if (listBox_Mulu.SelectedItem != null) //如果选定了的文件不为空
  26.                 {
  27.                     Image showPicture;  //定义Image类的实例
  28.                     

  29.                    // showPicture = (Bitmap)Image.FromFile(listBox_Mulu.SelectedItem.ToString()); //从当前选定的列表框的项创建新的Image

  30.                     //存储当前Image控件要显示的完整路径
  31.                     string ImagePath = null;
  32.                     //循环遍历,获得listbox框中的当前图片完整路径
  33.                     foreach (FileInfo fileName in files)
  34.                     {
  35.                         if (fileName.Name == listBox_Mulu.SelectedItem.ToString())
  36.                         {
  37.                             ImagePath = fileName.FullName;
  38.                         }
  39.                     }

  40.                     showPicture = (Bitmap)Image.FromFile(ImagePath); //从当前选定的列表框的项创建新的Image


  41.                     picBox_Show.SizeMode = PictureBoxSizeMode.Zoom;  //picBox中的图像显示方式为zoom
  42.                     picBox_Show.Image = showPicture; //将新建的图像在picBox中显示
  43.                 }
  44.             }
  45.             catch (Exception ex)
  46.             {
  47.             }
  48.         }

  49.         private void btn_Openpic_Click(object sender, EventArgs e)
  50.         {
  51.             //打开文件目录
  52.             //打开目录的控件folderBrowserDialog
  53.             //选中目录 点开文件
  54.             // 暂时不考虑文件夹中的文件类型,默认只有jpg图片文件


  55.             if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)//显示对话框 如果点了确定
  56.             {

  57.                 listBox_Mulu.Items.Clear(); //重选目录则清空目录
  58.                 string path = folderBrowserDialog1.SelectedPath; //取得选中的文件夹的路径               

  59.                 //为什么用文件流会报错文件不存在 .. 我只要文件名 不要路径啊!!!!!!!!!!!!!!!
  60.                 //---- 1. 代码正确 但是点击显示图片则报错
  61.                 //DirectoryInfo mulu = new DirectoryInfo(path); //返回目录路径
  62.                 //FileInfo[] files = mulu.GetFiles(); //获取目录中的文件
  63.                 //foreach (FileInfo temp in files)
  64.                 //{
  65.                 //    listBox_Mulu.Items.Add(temp.Name); //循环添加文件名到列表框
  66.                 //}

  67.                 //---- 2. 同上
  68.                 //DirectoryInfo mulu = new DirectoryInfo(path); //返回目录路径
  69.                 //FileInfo[] files = mulu.GetFiles(); //只获取目录中的文件名
  70.                 //listBox_Mulu.Items.AddRange(files); //添加所有文件名到列表框

  71.                 //---- 3.  在用

  72.                 /*
  73.                 string[] files = System.IO.Directory.GetFiles(path); //返回指定路径指向的文件名+路径名到字符串数组中
  74.                 string[] fileNames = System.IO.Directory.GetFiles()
  75.                  */
  76.                 //使用FileInfo和DirectorInfo结构可以很方便的获得文件信息,例如路径,文件名等。
  77.                 di = new DirectoryInfo(path);    //创建DirectoryInfo实例,关联path
  78.                 files = di.GetFiles();//将path下文件读入FileInfo结构,FileInfo结构就存储了path下所有的文件的文件信息

  79.                 foreach (FileInfo filename in files)
  80.                 {
  81.                     //添加如下代码:
  82.                     listBox_Mulu.Items.Add(filename.Name);//FileInfo结构中的Name属性获得每个文件的文件名;
  83.                 }
  84.             }
  85.         }


  86.     }
  87. }
复制代码
代码解释:
1、因为如果要使用listbox中的文件名来控制picturebox,必须得到全路径,所以要将FileInfo数组作为全局函数;
2、使用FileInfo的fullname属性同listbox当前项比较得到文件全路径,即可在picturebox中显示图片。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
张伟86 发表于 2013-5-2 10:57
1、使用Directory的GetFile函数时,需要自己做出一个方法,来获得图片文件的名字。比如:.jpg文件格式,文 ...

:handshake 3Q ~  终于懂了, 试过了也OK..
回复 使用道具 举报
不客气:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马