【问题标题】:Tag problem c# listbox标签问题 c# listbox
【发布时间】:2011-01-29 01:14:53
【问题描述】:

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

这是我的代码。

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

我遇到的问题是,当我运行程序时,我收到一条错误消息,说无法将类型字符串转换为 system.ListView,但我没有在我的程序中将 item 声明为字符串

这是我将项目添加到列表框的地方。请帮忙。我在最后期限,还有很多事情要做

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);
}

【问题讨论】:

  • 这应该是可能的,我们可以在您的列表框中添加项目吗?
  • 你能发布更多代码吗?它会在哪个行号上显示错误?
  • 检查设计者没有向集合中添加字符串项。

标签: c# .net listbox tags


【解决方案1】:

这可行,您需要显示将项目添加到列表的代码:

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】:

    只要把第二个code-sn-p的最后一行代码改一下就OK了,如下。

    listBox1.Items.Add(item);

    关于错误

    您将字符串作为项目添加到列表框,并且在 foreach 中,一个项目(它是一个字符串)被尝试将(种姓)隐式转换为 ListViewItem 以使其不起作用并且编译器给出错误。

    希望它会起作用。

    【讨论】:

      【解决方案3】:

      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)
      

      【讨论】:

        【解决方案4】:

        Poppy 您正在将title 添加到listBox1.Items

        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++;
                }
        

        【讨论】:

        • 字符串没有标签属性。
        • 字符串没有标签属性。
        • 我认为listBox1.Items 的类型是string。正如您正确指出的那样,循环中的代码可能还有其他问题。
        • ListBox.Items 是一个 ObjectCollection。
        • 他们可以拥有string类型的对象吗?
        【解决方案5】:

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

        【讨论】:

        • 可能太短了。我的意思是 ListBox 中的一个对象不是(也不能转换)为 ListViewItem。
        【解决方案6】:

        Tag 是否有一个名为 photoid 的成员?也许您需要一个演员来将您的“标签”转换为应有的内容?

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

        【讨论】:

        • 我猜 Tag 是 Poppy 创建的一个类 - 正在完成转换,因为 Tag 属性只是返回一个对象。
        猜你喜欢
        • 2011-02-08
        • 1970-01-01
        • 2023-03-11
        • 2023-03-05
        • 2023-04-11
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 2013-05-26
        相关资源
        最近更新 更多