winforms 如何在ListBox中显示UserControl对象?

a0zr77ik  于 2023-11-21  发布在  其他
关注(0)|答案(2)|浏览(277)

我有一个.Net Framework ListBox并添加了两个项目,但只显示了一个。
代码:

  1. private class VisibleObject
  2. {
  3. public override string ToString()
  4. {
  5. return "VisibleObject";
  6. }
  7. }
  8. private class InvisibleObject : UserControl
  9. {
  10. public override string ToString()
  11. {
  12. return "InvisibleObject";
  13. }
  14. }
  15. private void InsertItems()
  16. {
  17. listbox.Items.Add(new VisibleObject());
  18. listbox.Items.Add(new InvisibleObject());
  19. }

字符串
使用此代码,VisibleObject显示在列表框中,但InvisibleObject没有。InvisibleObject基于UserControl
列表框应该显示ToString()的结果,但这不适用于UserControl。为什么以及如何在ListBox中显示UserControl

hec6srdp

hec6srdp1#

你可以尝试使用ListControl.Format事件:

  1. listbox.Format += listbox_Format;
  2. private void listbox_Format(object sender, ListControlConvertEventArgs e)
  3. {
  4. e.Value = e.ListItem.ToString();
  5. }

字符串
测试结果:


的数据

lskq00tm

lskq00tm2#

你可以显式声明这个对象可以转换为字符串,用TypeConverterAttribute装饰这个类。

  1. [TypeConverter(typeof(StringConverter))]
  2. private class InvisibleObject : UserControl {
  3. public override string ToString() {
  4. return "InvisibleObject";
  5. }
  6. }

字符串
然后,当您将UserControl添加到ListBox时:

  1. // [...]
  2. listbox.Items.Add(new InvisibleObject());


ToString()方法将被调用。

展开查看全部

相关问题