CheckedListBox - FileInfo对象的集合 - 显示自定义ToString

时间:2011-10-03 20:59:45

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

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

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

我基本上在做

checkedListBox.Items.Add(fileInfo)

,结果只是文件的文件名。

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

我希望能够显示名称 - FullName

之类的内容

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

2 个答案:

答案 0 :(得分:4)

实际上,它似乎应该是可能的。 CheckedListBox具有FormattingEnabled属性和从Format继承的ListBox事件,在显示每个项目之前调用该事件。所以沿着这些方向应该有用:

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
    }
}

拥有视图模型的另一个好处是,您可以进一步装饰它以便以您喜欢的方式显示。

答案 1 :(得分:1)

除了创建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;
           }
        }
    }