我在c#windows窗体应用程序项目中有一个组合框,我使用以下代码将组合框显示到文件夹的内容
string path = Path.GetFullPath("a").Replace(@"\bin\Debug\a", "") + @"\Files";
BotOptions.DataSource = Directory.GetFiles(path);
它确实有效,但组合框包含文件夹中文件的完整路径,我想问你的是有没有办法让它成为组合框只显示文件名但是组合框的实际值将保持完整路径?
答案 0 :(得分:5)
您可以将组合框的DataSource设置为DirectoryInfo类返回的FileInfo列表,然后将ValueMember设置为FullName属性,将DisplayMember设置为Name属性
string path = Path.GetFullPath("a").Replace(@"\bin\Debug\a", "") + @"\Files";
DirectoryInfo de = new DirectoryInfo(path);
BotOptions.DataSource = de.EnumerateFiles().ToList();
BotOptions.ValueMember = "FullName";
BotOptions.DisplayMember = "Name";
现在要获取文件的全名,请使用属性SelectedValue
string fullPath = BotOptions.SelectedValue?.ToString();
最后,无论您要对该文件执行什么操作,请记住ComboBox中的每个项目都是FileInfo实例,因此您可以读取SelectedItem属性以发现有关所选文件的信息,如Attributes,CreationDate,Length等。
if(BotOptions.SelectedItem != null)
{
FileInfo fi = BotOptions.SelectedItem as FileInfo;
Console.WriteLine("File length: " + fi.Length);
}
答案 1 :(得分:0)
对此没有真正开箱即用的解决方案,因此您需要编写一些背景代码行。例如,使用IDictionary,文件名称为键,完整路径为值。然后插入每次用户在组合框中选择一个条目时触发的事件处理程序,以激活相应的字典条目。
很抱歉,我无法向您展示任何现成的代码段,因为我在Gtk#app中遇到了同样的问题,而不是在Windows窗体中。但我强烈希望你能发现我的提示有用。
答案 2 :(得分:0)
你能做的是: 创建一个具有Properties FileName和FullPathAndFileName的类,并重写ToString方法。组合框将显示ToString的返回,您将拥有您可以通过属性访问的SelectedItem。
public class ComboBoxItemForPathAndFileName
{
public ComboBoxItemForPathAndFileName(string fileName, string fullPathAndFileName)
{
this.FileName = fileName;
this.FullPathAndFileName = fullPathAndFileName;
}
public string FileName{get;set;} = string.Empty;
public string FullPathAndFileName{get;set;} = string.Empty;
public override ToString()
{
return this.FileName;
}
}