2016-03-21 5 views
0

Это мой код, чтобы заполнить ListBox Названный delBooks с ListViewItem объекта и элементов .Text и .Tag свойствами.C# ListBox отображается неправильный формат при использовании ListViewItem

ListViewItem item = new ListViewItem(); 
item.Text = "ss"; // Or whatever display text you need 
item.Tag = "dd"; 
delBooks.Items.Add(item); 

Выход я вижу в ListBox выглядит следующим образом:

ListViewItem: {ss}

Как я могу исправить это так, он будет отображать ss в ListBox?

ответ

1

Объект, подобный ListViewItem, не существует для ListBox. Это одна из причин того, что управление ListBox было заменено элементом управления ListView. Для того, чтобы получить ListViewItem как функциональность из ListBox управления вы должны реализовать свой собственный объект

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 с пользовательского объекта просто сделать:

listbox.DisplayMember = "Text"; 
listbox.Items.Add(new ListBoxItem("ss", "dd")); 

Где .DisplayMember свойство ListBox является имя свойства вашего пользовательского объекта, которое должно отображаться пользователем ListBox.

Если вам необходимо получить доступ к пользовательским объектам значения на основе вашей коллекции ListBox элемента вы можете сделать простой бросок для извлечения этих значений:

MessageBox.Show(((ListBoxItem)listbox.Items[0]).Tag)); 

Если .Tag свойства является значением "dd", что мы установили ранее

PS: Если вы приверженец конструкции, как я этот метод будет также работать с struct

EDIT: Если вы действительно мертв набор на использование ListViewItem вы технически можете просто установив .DisplayMember к (в вашем случае) .Text свойства ListViewItem объекта

0

вам нужно изменить свою последнюю строку как «delBooks.Items.Add (item.Text.toString());»

+0

СММ то тег не будете сохранены и всей целью использования ListViewItem потерян. PS: в случае, если вы говорите, что это должно быть просто «item.Text», поскольку оно уже является строкой – CBeTJlu4ok

+0

Да, да, это может быть без toString, без которой вы можете обойтись, просто напишите, чтобы объяснить вам, что аргументы метода add() - это строка – user6095732

+0

пользователь6095732 правильный. Метод Add() класса ListBox.ObjectCollection принимает только экземпляр объекта; нет перегрузки, которая принимает экземпляр ListBoxItem специально. Независимо от того, какой экземпляр объекта вы используете, есть метод ToString(), вызываемый для отображения пользователю. Я думаю, вы запутаете класс ListBox классом ListView, который является более привлекательным. – rclocher3

2

Установите DisplayMember на ListBox на номер Text (в виде строки).