2013-03-17 61 views
0

我有對象類型的列表,像這樣:List <Sentence> sentences = new List<Sentence>();轉換列表轉換成字符串顯示在列表框中

和列表包含我要顯示在列表框中各種串/句子,但是,每次我嘗試顯示列表,在列表框中顯示(集合)

我有什麼:listBox1.Items.Add(sentences);

有沒有辦法到對象轉換爲字符串,以便在列表中的文本/句話是在列表框可讀?

句子結構的內容只是一個字符串變量。

enter image description here

+1

顯示'Sentence'類結構。 – MarcinJuraszek 2013-03-17 21:15:41

+0

可能[ListControl.DisplayMember屬性](http://msdn.microsoft.com/en-GB/library/system.windows.forms.listcontrol.displaymember.aspx)有幫助嗎? – 2013-03-17 21:16:32

回答

0

您正在看到一個字符串。具體而言,您會看到該對象的.toString()。

您想要傳遞集合的內容 - 請嘗試.AddRange()。

4

如果你希望顯示代表性的列表框中Sentence實例的東西,覆蓋ToString()

public class Sentence 
{ 
    public override string ToString() 
    { 
     //return something meaningful here. 
    } 

    // Rest of the implementation of Sentence 
} 
0

您必須覆蓋ToString

public class Sentence 
{ 
    public string Text{ get; set; } 

    public override string ToString() 
    { 
     return this.Text; 
    } 
} 

注意Formatting應禁用:

listBox1.FormattingEnabled = false; 

如提到here

另一種方法是使用LINQ和AddRange

listBox1.Items.AddRange(sentences.Select(s => s.Text).ToArray()); 

(假設你的Sentence類有一個屬性Text

1

您要添加的集合項目本身(即sentences)到ListBox控制。 您將需要覆蓋Sentence -class中的ToString() -method以返回句子的文本值。然後使用foreach循環和你的句子添加到列表框,如:

foreach(Sentence sen in sentences){ 
    ListBox1.Items.Add(sen.ToString()); 
} 
0

似乎要添加語句列表到列表框中。我不確定你的期望會發生什麼......我的猜測是你正試圖將列表中的每個句子添加到列表框中,因此你應該使用AddRange選項,如其他答案中所述。 總而言之,如果您確實使用AddRange,則可以使用列表框的「DisplayMember」屬性來顯示在Sentence類中持有Text的屬性。

private void Form1_Load(object sender, EventArgs e) 
    { 
     listBox1.DisplayMember = "Text"; 
     listBox1.Items.Add(new Sentence { Text = "abc" }); 
     listBox1.Items.Add(new Sentence { Text = "abc1" }); 
     listBox1.Items.Add(new Sentence { Text = "abc2" }); 
    } 

    public class Sentence 
    { 
     public string Text { get; set; } 
    }