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

a0zr77ik  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(76)

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

private class VisibleObject
{
    public override string ToString()
    {
        return "VisibleObject";
    }
}

private class InvisibleObject : UserControl
{
    public override string ToString()
    {
        return "InvisibleObject";
    }
}

private void InsertItems()
{
    listbox.Items.Add(new VisibleObject());
    listbox.Items.Add(new InvisibleObject());
}

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

hec6srdp

hec6srdp1#

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

listbox.Format += listbox_Format;

private void listbox_Format(object sender, ListControlConvertEventArgs e)
{
    e.Value = e.ListItem.ToString();
}

字符串
测试结果:


的数据

lskq00tm

lskq00tm2#

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

[TypeConverter(typeof(StringConverter))]
private class InvisibleObject : UserControl {
    public override string ToString() {
        return "InvisibleObject";
    }
}

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

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


ToString()方法将被调用。

相关问题