C#覆盖CheckedBoxList显示成员

问题描述:

有没有办法为CheckedListBox设置多列显示成员,而无需创建一个将属性值合并在一起的新类?例如像重写DisplayMember一样?C#覆盖CheckedBoxList显示成员

我使用C#4.0 VS 2015年

+0

与复选框多列列表控件与View =细节和复选框一个ListView =真正。教CheckedListBox相同的技巧是不值得任何人的时间。 –

+0

如果您正在寻找一个真正的多列控件,那么您正在寻找'ListView'或'DataGridView'。但是,如果您正在寻找一种基于多个属性来格式化“CheckedListBox”的显示值的方法,则可以依赖其“Format”事件。 –

你并不需要重写DisplayMember。相反,您可以处理Format事件CheckedListBox,这样您可以为每个元素提供自定义显示值。

格式化事件在列表控件 中的每个可见项目被格式化之前引发。处理此事件使您可以访问通过 ListControlConvertEventArgsValue属性为此列表项显示的字符串 。

事件的事件参数,包含ListItem属性,它是项目背后的对象,所以你可以在这里把一些性质和结果分配给e.Value

例如,假设你是显示在您的checkedListBox1一个List<Product>,我们可以自定义外观简单地这样说:

private void checkedListBox1_Format(object sender, ListControlConvertEventArgs e) 
{ 
    var p = (Product)e.ListItem; 
    e.Value = string.Format("Name: {0}, Price: {1}", p.Name, p.Price); 
} 
+0

谢谢,我一直在寻找这个很长一段时间! –

+0

不客气:) –