【问题标题】:How to change what a combo box displays如何更改组合框显示的内容
【发布时间】:2017-01-02 21:13:58
【问题描述】:

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

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

它确实有效,但组合框包含文件夹中文件的完整路径,我想问你的是 有没有办法做到这一点,所以组合框只会显示文件名,但组合框的实际值将保持完整路径?

【问题讨论】:

    标签: c# winforms combobox


    【解决方案1】:

    您可以将组合框的 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 属性以发现有关所选文件的信息,例如属性、创建日期、长度等。 .

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        你可以做的是: 创建一个具有属性 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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-23
          • 1970-01-01
          • 2023-03-07
          相关资源
          最近更新 更多