C#中的清单列表框,仅显示文件名,不显示完整路径

时间:2018-06-22 15:56:21

标签: c# winforms checkedlistbox

I am trying to select a bunch of files and put the names into a checkedlistbox but it always displays the full directory path with the filename. I only want the user to see the file name but I want to preserve the path inside the code so when the user clicks a button the program can still find the files and operate on them.

我的问题已经在另一个论坛上提出,但是我似乎无法获得预期的结果,目前,我的代码如下:

  1. 用户单击button_1:用户选择包含文件的文件夹

  2. 将显示
  3. 所有CSV文件,其文件名仅在复选框列表中,并出现一个消息框,显示其完整路径。用户继续检查必要的文件。

  4. 用户单击button_2:显示一个消息框,其中包含已选中的文件名,而不是我尝试检索的完整文件路径。

在此方面提供的任何帮助将非常感谢。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace SelectFiles
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            checkedListBox1.CheckOnClick = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                checkedListBox1.Items.Clear();

                string[] files = Directory.GetFiles(fbd.SelectedPath);
                List<FileInfo> excel_files = new List<FileInfo>();

                foreach (string file in files)
                {
                    FileInfo f = new FileInfo(file);
                    MessageBox.Show((f.FullName));
                    excel_files.Add(f);
                }
                BindingSource bs = new BindingSource();
                bs.DataSource = excel_files;
                checkedListBox1.DataSource = bs;
                checkedListBox1.DisplayMember = "Name";//Path.GetFileName(file);
            }
        }
        private void button2_Click_1(object sender, EventArgs e)
        {

            List<FileInfo> list_all_excelfiles = new List<FileInfo>();
            foreach (FileInfo item in checkedListBox1.CheckedItems)
            {
                list_all_excelfiles.Add(item);
                MessageBox.Show(Path.GetFileName(item.FullName));
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您想在用户单击button2时获得文件完整路径

这可以通过修改代码来实现。

在button2事件中,要求提供Path.GetFileName

将其更改为

Path.GetFullPath
  

将返回文件的完整路径。

您的代码应类似于:

private void button2_Click_1(object sender, EventArgs e)
{
  List<FileInfo> list_all_excelfiles = new List<FileInfo>();
  foreach (FileInfo item in checkedListBox1.CheckedItems)
    {
       list_all_excelfiles.Add(item);
       MessageBox.Show(Path.GetFullPath(item.Name));
    }
}

注意:在您的代码中,您正试图通过Clear()方法清除checkedListBox1中的项目,但会遇到异常。

  

System.ArgumentException:'在以下情况下无法修改项目集合   设置了DataSource属性。'

那是因为您已经添加了数据源!

代替使用:

checkedListBox1.DataSource = null;