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
具有从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;
}
}
}