3

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

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

我基本上在做

checkedListBox.Items.Add(fileInfo)

结果只是文件的文件名。

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

我希望能够显示类似 Name - FullName

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

4

2 回答 2

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

The additional advantage to having a view model is that you can decorate it further for display purposes all the way you like.

于 2011-10-03T21:15:06.673 回答
1

custom我不知道除了创建一个类并在其中包含一个实例之外是否有解决FileInfo方法,这样您可以创建一个新的并在其中property包含自定义数据或函数overrideToString()

类似的东西(这用于演示目的)

 MyFileInfo
    {
        public FileInfo TheFileInfo;
        public string CustomProperty
        {
           get
           {
               if(this.TheFileInfo != null)
                    return this.TheFileInfo.FileName + this.TheFileInfo.FullName;
                return string.Empty;
           }
        }
    }
于 2011-10-03T21:06:57.200 回答