2010-03-18 49 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未在錯誤工作和編譯器給出了錯誤。

希望它能起作用。