与ListViewItem一起使用时,C#ListBox显示的格式错误

与ListViewItem一起使用时,C#ListBox显示的格式错误,c#,listbox,listviewitem,C#,Listbox,Listviewitem,这是我的代码,用ListViewItem对象和items.Text和.Tag属性填充名为delBooks的ListBox ListViewItem item = new ListViewItem(); item.Text = "ss"; // Or whatever display text you need item.Tag = "dd"; delBooks.Items.Add(item); 我在列表框中看到的输出如下所示: ListViewItem:{ss} 如何更正此问题,使其在列表框中

这是我的代码,用
ListViewItem
对象和items
.Text
.Tag
属性填充名为delBooks
ListBox

ListViewItem item = new ListViewItem();
item.Text = "ss"; // Or whatever display text you need
item.Tag = "dd";
delBooks.Items.Add(item);
我在
列表框中看到的输出如下所示:

ListViewItem:{ss}


如何更正此问题,使其在
列表框中显示
ss

您需要更改最后一行,如“delBooks.Items.Add(item.Text.toString());”

您需要更改最后一行,如“delBooks.Items.Add(item.Text.toString());”将
列表框上的
显示成员
设置为
文本
(作为字符串)。

列表框上的
显示成员
设置为
文本
(作为字符串)。列表框中不存在类似
列表视图项
的对象。这是
ListBox
控件被
ListView
控件取代的原因之一。为了从
ListBox
控件中获得类似于
ListViewItem
的功能,您必须实现自己的对象

class ListBoxItem
{
    public string Text { get; set; }
    public string Tag { get; set; }

    public ListBoxItem(string text, string tag)
    {
        this.Text = text;
        this.Tag = tag;
    }
}
要使用自定义对象填充
列表框
,只需执行以下操作:

listbox.DisplayMember = "Text";
listbox.Items.Add(new ListBoxItem("ss", "dd"));
其中
列表框的
.DisplayMember
属性是要在
列表框中显示给用户的自定义对象的属性名称

如果需要根据
列表框
项集合访问自定义对象值,可以执行简单的转换来检索这些值:

MessageBox.Show( ((ListBoxItem)listbox.Items[0]).Tag) );
其中,
.Tag
属性是我们前面设置的值
“dd”

PS:如果你像我一样对设计一丝不苟,这种方法也适用于
struct


编辑:如果您真的死心塌地地想使用
ListViewItem
,从技术上讲,只需将
.DisplayMember
设置为
ListViewItem
对象的
.Text
属性就可以了
ListBox
不存在类似
ListViewItem
的对象。这是
ListBox
控件被
ListView
控件取代的原因之一。为了从
ListBox
控件中获得类似于
ListViewItem
的功能,您必须实现自己的对象

class ListBoxItem
{
    public string Text { get; set; }
    public string Tag { get; set; }

    public ListBoxItem(string text, string tag)
    {
        this.Text = text;
        this.Tag = tag;
    }
}
要使用自定义对象填充
列表框
,只需执行以下操作:

listbox.DisplayMember = "Text";
listbox.Items.Add(new ListBoxItem("ss", "dd"));
其中
列表框的
.DisplayMember
属性是要在
列表框中显示给用户的自定义对象的属性名称

如果需要根据
列表框
项集合访问自定义对象值,可以执行简单的转换来检索这些值:

MessageBox.Show( ((ListBoxItem)listbox.Items[0]).Tag) );
其中,
.Tag
属性是我们前面设置的值
“dd”

PS:如果你像我一样对设计一丝不苟,这种方法也适用于
struct


编辑:如果你真的死心塌地地想使用
ListViewItem
,从技术上讲,你只需将
.DisplayMember
设置为
ListViewItem

对象的
.Text
属性,那么标签就不会被保存,使用ListViewItem的全部目的也就失去了。PS:如果你说的是“item.Text”,因为它已经是stringYeah是的,它可以不使用toString,你可以不使用它ı只需写一篇文章来解释add()方法的参数是stringuser6095732是正确的。ListBox.ObjectCollection类的Add()方法只接受一个对象实例;没有专门接受ListBoxItem实例的重载。无论您在其中填充什么对象实例,都会调用其ToString()方法以向用户显示。我认为您混淆了ListBox类和ListView类,后者更为奇特。嗯,这样标记就不会被保存,使用ListViewItem的整个目的也就失去了。PS:如果你说的是“item.Text”,因为它已经是stringYeah是的,它可以不使用toString,你可以不使用它ı只需写一篇文章来解释add()方法的参数是stringuser6095732是正确的。ListBox.ObjectCollection类的Add()方法只接受一个对象实例;没有专门接受ListBoxItem实例的重载。无论您在其中填充什么对象实例,都会调用其ToString()方法以向用户显示。我认为您混淆了ListBox类和ListView类,后者更为奇特。