2010-03-18 60 views
4

嗨,我想使用列表框的标记项。标签问题c#listbox

继承人我的代码。

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

问题IM就吃是,当我运行程序我得到一个错误消息,言谈不能类型字符串转换为system.ListView但我还没有宣布项目作为一个字符串anywher在我的程序

这是我在哪里添加项目到列表框。请帮忙。我在死亡线上,有太多的事情要做

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

这应该是可能的,我们可以在哪里添加项目到你的列表框? – 2010-03-18 14:20:35

+0

你能发表更多的代码吗?哪个行号会给你提供错误? – 2010-03-18 14:21:48

+0

检查设计者是否没有向集合添加字符串项目。 – Kleinux 2010-03-18 14:57:58

回答

0

Does Tag有一个名为photoid的成员?也许你需要在那里演员将你的'标签'转换成它应该是的?

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

我在猜测Tag是一个Poppy创建的类 - 正在完成转换,因为Tag属性只是返回一个对象。 – 2010-03-18 14:20:49

+0

我认为你的权利:) – galford13x 2010-03-18 14:22:29

2

罂粟您正在添加titlelistBox1.Items

titlestring的类型。

所以,当你访问它使用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++; 
     } 
+0

字符串没有标签属性。 – 2010-03-18 14:24:08

+0

字符串没有标签属性。 – Bobby 2010-03-18 14:24:34

+0

我认为'listBox1.Items'属于'string'类型。正如您正确指出的,循环中的代码可能存在其他问题。 – 2010-03-18 14:27:56

0

除非你命名怪异的事情,否则我会说错误是你想从列表框中获取一个ListViewItem。

+0

可能不必要的短。我的意思是,ListBox中的一个对象不是(也不能转换成)ListViewItem。 – Don 2010-03-18 14:28:16

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

编辑以下更多的代码:

您要添加字符串到您的列表框,而不是ListViewItem的:

listBox1.Items.Add(title);应该listBox1.Items.Add(item);

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) 
0

只要更改第二个代码片段的最后一行代码,一切都会正常,如下所示。

listBox1.Items。新增项目);

关于

您添加字符串到列表框中的项目,在foreach一个项目(这是一个字符串)试图转换(种姓),以含蓄的ListViewItem到HICH未在错误工作和编译器给出了错误。

希望它能起作用。