我在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
答案 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;
}
}
}