我的问题已经在另一个论坛上提出,但是我似乎无法获得预期的结果,目前,我的代码如下:
用户单击button_1:用户选择包含文件的文件夹
所有CSV文件,其文件名仅在复选框列表中,并出现一个消息框,显示其完整路径。用户继续检查必要的文件。
用户单击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));
}
}
}
}
答案 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;