【问题标题】:CheckedListBox - Collection of FileInfo objects - Display Custom ToStringCheckedListBox - FileInfo 对象的集合 - 显示自定义 ToString
【发布时间】:2011-11-30 05:37:07
【问题描述】:

我在 WinForms 应用程序(3.5 运行时)中有一个 CheckedListBox,我正在向 Items ObjectCollection 添加一堆 FileInfo 对象。问题是我不喜欢 CheckedListBox 中显示的内容(因为 FileInfo 来自 Directory.GetFiles() 它只显示列表框中文件的 FileInfo.Name)。

是否有任何简单的方法可以更改 CheckedListBox 中显示的内容,而无需创建单独的自定义类/对象。

我基本上在做

checkedListBox.Items.Add(fileInfo)

结果就是文件的文件名。

更改显示成员有效,但我无法创建自定义内容,只能创建 FileInfo 类中的现有属性。

我希望能够显示名称 - 全名之类的内容

示例(所需): File1.txt - C:\Path\SubPath\File1.txt

【问题讨论】:

    标签: c# .net .net-3.5 c#-3.0 checkedlistbox


    【解决方案1】:

    实际上,这似乎毕竟应该是可能的。 CheckedListBox 有一个FormattingEnabled 属性和一个从ListBox 继承的Format 事件,该事件在显示每个项目之前被调用。所以沿着这些思路应该可以工作:

    myCheckedListBox.FormattingEnabled = true;
    myCheckedListBox.Format += (s, e) => { e.Value = string.Format("{0} - {1}", ((FileInfo)e.ListItem).Name, ((FileInfo)e.ListItem).FullName); };
    

    虽然没有测试过。另见MSDN

    旧答案:

    我认为如果不创建包装器就无法做到这一点。虽然 10 行代码对我来说似乎并没有那么糟糕:

    class FileInfoView
    {
        public FileInfo Info { get; private set; }
    
        public FileInfoView(FileInfo info)
        {
            Info = info;
        }
    
        public override string ToString()
        {
            // return whatever you want here
        }
    }
    

    拥有一个视图模型的另一个好处是你可以进一步装饰它以达到你喜欢的所有显示目的。

    【讨论】:

    • 是的,它只是稍后处理 CheckedListBox 中已经存在的项目,我现在也必须执行自定义代码......哦,只是我的开发人员懒惰。也许这是在 C# 中具有扩展属性的一个很好的理由。
    • 我昨天花时间在 FileInfo 周围实现了一个自定义包装器...我将测试您拥有的这个新解决方案。如果它有效...BOOM 正确答案!!!
    【解决方案2】:

    除了创建custom 类并在其中包含FileInfo 的实例外,我不知道是否有解决此问题的方法 通过这种方式,您可以创建一个新的property 并在其中包含自定义数据,或者override ToString() 函数

    类似的东西(这是为了演示)

     MyFileInfo
        {
            public FileInfo TheFileInfo;
            public string CustomProperty
            {
               get
               {
                   if(this.TheFileInfo != null)
                        return this.TheFileInfo.FileName + this.TheFileInfo.FullName;
                    return string.Empty;
               }
            }
        }
    

    【讨论】:

    • 你们俩的答案基本相同...我不知道该给谁正确答案
    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多