标记问题c#listbox

时间:2010-03-18 14:14:55

标签: c# .net listbox tags

您好我正在尝试使用列表框的标记项。

继承我的代码。

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

问题我正在运行程序时我得到一条错误消息sayin无法将类型字符串转换为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 个答案:

答案 0 :(得分:2)

您要将title添加到listBox1.Items的Poppy。

title的类型为string

因此,当您访问它时,请使用string类型foreach (string item in listBox1.Items)

尝试。这有帮助吗?

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

答案 1 :(得分:2)

这样做,您需要显示将项目添加到列表中的代码:

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 :(得分:1)

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)

答案 3 :(得分:0)

Tag是否有名为photoid的成员?也许你需要一个演员将你的'标签'转换成它应该是什么?

        //Tag tag = (Tag) item.Tag;
        MyObject tag = (MyObject)item.Tag;
        saveSlide(showid, tag.photoid, enumber); 
        number++; 

答案 4 :(得分:0)

除非你把事情命名为奇怪,否则我会说错误是你试图从ListBox中获取ListViewItem。

答案 5 :(得分:0)

只需更改第二个代码段的最后一行代码,一切都会好的,如下所示。

  

listBox1.Items.Add(项目);

关于错误

您在listBox中添加了字符串作为项目,并且在foreach中,项目(这是一个字符串)被尝试隐式转换(caste)到ListViewItem,而hich不起作用,编译器会给出错误。

希望它能奏效。