Проблема с тегом c # listbox - PullRequest
       46

Проблема с тегом c # listbox

4 голосов
/ 18 марта 2010

Привет, я пытаюсь использовать элемент тега в списке.

вот мой код.

            int number = 0;
            foreach (ListViewItem item in listBox1.Items)
            {
                Tag tag = (Tag) item.Tag;
                saveSlide(showid, tag.photoid, enumber);
                number++;
            }

проблема в том, что когда я запускаю программу, я получаю сообщение об ошибке, которое говорит, что я не могу преобразовать строку типа в system.ListView, но я не объявил элемент как строку в моей программе

Здесь я добавляю элементы в список. Пожалуйста помоги. Я на мертвой линии и ооочень много дел

private void buttonAdd_Click(object sender, EventArgs e)
{
    //add selected item into listBox
    DataRowView drv = (DataRowView)listBox1.SelectedItem;
    Tag tag = new Tag();
    string title = drv["title"].ToString();
    ListViewItem item = new ListViewItem(title);
    item.Tag = tag;
    tag.photoid = (int)drv["photoid"];

    listBox1.Items.Add(title);
}

Ответы [ 6 ]

2 голосов
/ 18 марта 2010

Это работает, вам нужно показать код, куда вы добавляете элементы в список:

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

ListBox listBox = new ListBox();
listBox.Items.Add(new ListViewItem { Tag = new Tag() });
foreach (ListViewItem item in listBox.Items)
{
    Tag tag = (Tag)item.Tag;
    Console.WriteLine(tag);
}

Редактировать следующий код:

Вы добавляете строки в свой ListBox вместо ListViewItem:

listBox1.Items.Add(title); должно быть listBox1.Items.Add(item);

2 голосов
/ 18 марта 2010

Мак вы добавляете title к listBox1.Items.

title относится к типу string.

Поэтому при доступе к нему используйте string тип, подобный этому foreach (string item in listBox1.Items).

Try. Это помогает?

        int number = 0;
        foreach (string item in listBox1.Items)
        {
            Tag tag = (Tag) item.Tag;
            saveSlide(showid, tag.photoid, enumber);
            number++;
        }
1 голос
/ 18 марта 2010

ListBox.Items - это ObjectCollection . Это означает, что вы можете выбрать тип объекта для вставки в него.

Когда вы делаете это:

string title = drv["title"].ToString();
listBox1.Items.Add(title);

вы помещаете в него строковые объекты, поэтому вам нужно будет получить их следующим образом:

foreach (string item in listBox1.Items)

Вместо этого вы, вероятно, хотите, чтобы ваш код был более похож на это:

ListViewItem item = new ListViewItem(title);
item.Tag = tag;
tag.photoid = (int)drv["photoid"];
listBox1.Items.Add(item); // The difference is here - add *item* not *title*

тогда вы сможете использовать это так, как изначально написали:

foreach (ListViewItem item in listBox1.Items)
0 голосов
/ 04 сентября 2010

Просто измените последнюю строку кода второго фрагмента кода, и все будет хорошо, как показано ниже.

listBox1.Items.Add (пункт);

Об ошибке

Вы добавили строки в listBox как элементы, и в foreach пытались неявно преобразовать (кастировать) в ListViewItem элемент (который является строкой), чтобы он не работал, и компилятор выдает ошибку.

Надеюсь, это сработает.

0 голосов
/ 18 марта 2010

Если вы не назвали вещи странными, я бы сказал, что ошибка в том, что вы пытаетесь получить ListViewItem из ListBox.

0 голосов
/ 18 марта 2010

Есть ли у тега элемент с именем photoid? Может быть, вам нужен приведение, чтобы преобразовать ваш «тег» во что бы то ни было?

        //Tag tag = (Tag) item.Tag;
        MyObject tag = (MyObject)item.Tag;
        saveSlide(showid, tag.photoid, enumber); 
        number++; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...