C# 如何更改组合框显示的内容

C# 如何更改组合框显示的内容,c#,winforms,combobox,C#,Winforms,Combobox,我在一个c#windows窗体应用程序项目中有一个组合框,我使用以下代码使组合框显示到文件夹的内容 string path = Path.GetFullPath("a").Replace(@"\bin\Debug\a", "") + @"\Files"; BotOptions.DataSource = Directory.GetFiles(path); 它确实可以工作,但组合框包含文件夹中文件的完整路径,我想问的是,有没有办法使组合框只显示文件名,但组合框的实际值将保持完整路径?没有现成的解决

我在一个c#windows窗体应用程序项目中有一个组合框,我使用以下代码使组合框显示到文件夹的内容

string path = Path.GetFullPath("a").Replace(@"\bin\Debug\a", "") + @"\Files";
BotOptions.DataSource = Directory.GetFiles(path);

它确实可以工作,但组合框包含文件夹中文件的完整路径,我想问的是,有没有办法使组合框只显示文件名,但组合框的实际值将保持完整路径?

没有现成的解决方案,所以你需要写几行背景代码。例如,使用IDictionary,文件名作为键,完整路径作为值。然后插入一个事件处理程序,该事件处理程序在用户每次选择组合框中的条目时触发,以激活相应的字典条目


很抱歉,我无法向您展示任何现成的代码片段,因为我在Gtk应用程序中遇到了相同的问题,而不是在Windows窗体中。但我强烈希望我的提示能对您有所帮助。

这方面没有现成的解决方案,因此您需要编写几行背景代码。例如,使用IDictionary,文件名作为键,完整路径作为值。然后插入一个事件处理程序,该事件处理程序在用户每次选择组合框中的条目时触发,以激活相应的字典条目


很抱歉,我无法向您展示任何现成的代码片段,因为我在Gtk应用程序中遇到了相同的问题,而不是在Windows窗体中。但我强烈希望我的提示对您有所帮助。

您可以将combobox的数据源设置为类返回的FileInfo列表,然后将设置为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";
现在要获取文件的全名,请使用属性

最后,无论您想对该文件执行什么操作,请记住ComboBox中的每个项目都是一个FileInfo实例,因此您可以读取SelectedItem属性来发现有关所选文件的信息,如属性、创建日期、长度等

if(BotOptions.SelectedItem != null)
{
    FileInfo fi = BotOptions.SelectedItem as FileInfo;
    Console.WriteLine("File length: " + fi.Length);
}

您可以将combobox的数据源设置为类返回的FileInfo列表,然后将设置为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";
现在要获取文件的全名,请使用属性

最后,无论您想对该文件执行什么操作,请记住ComboBox中的每个项目都是一个FileInfo实例,因此您可以读取SelectedItem属性来发现有关所选文件的信息,如属性、创建日期、长度等

if(BotOptions.SelectedItem != null)
{
    FileInfo fi = BotOptions.SelectedItem as FileInfo;
    Console.WriteLine("File length: " + fi.Length);
}
您可以做的是: 创建一个具有属性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;
    }
}
您可以做的是: 创建一个具有属性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;
    }
}