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

本文关键字:显示 自定义 ToString 集合 FileInfo 对象 CheckedListBox | 更新日期: 2023-09-27 18:10:31

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

是否有简单的方法来改变在checklistbox中显示的内容,而不必创建一个单独的自定义类/对象?

我基本上在做

checkedListBox.Items.Add(fileInfo)

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

改变显示成员工作,但我不能创建自定义的东西,只能在FileInfo类中现有的属性。

我希望能够显示像Name - FullName

这样的内容

例子(期望):File1.txt - C:'Path'SubPath'File1.txt

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

实际上,这似乎是可能的。CheckedListBox具有从ListBox继承的FormattingEnabled属性和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
    }
}
使用视图模型的另一个好处是,您可以按照自己喜欢的方式对其进行进一步装饰,以达到显示的目的。

我不知道是否有工作,除了创建一个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;
           }
        }
    }