2015-09-06 185 views
2

我想組合兩個列表框的內容,例如,如果列表框1有A,B,C和列表框2中有1,2,3,輸出列表框3將是:A1,A2,A3,B1,B2,B3,C1,C2,C3。我下面的代碼幾乎可以做到這一點,但是它覆蓋了A和B迭代,只顯示了C迭代。我在這裏錯過了什麼?將兩個列表框中的項目合併到第三個列表框中

string A; string B;

private void button1_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listBox1.Items.Count; i++) 
    { 
     A = listBox1.Items[i].ToString(); 
    } 
    for (int j = 0; j < listBox2.Items.Count; j++) 
    { 
     B = listBox2.Items[j].ToString(); 
     listBox3.Items.Add(A + ": " + B); 
    } 
} 
+0

你在哪裏聲明'A'&'B'? – Enigmativity

回答

2
private void button1_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listBox1.Items.Count; i++) 
    { 
     A = listBox1.Items[i].ToString(); 
     for (int j = 0; j < listBox2.Items.Count; j++) 
     { 
      B = listBox2.Items[j].ToString(); 
      listBox3.Items.Add(A + ": " + B); 
     } 
    } 
} 

我感動的第二個for循環到第一個。這應該工作。

+1

是的。是的,現在可以工作,謝謝! – eltel2910

3

是的,你錯過了第二個啓動時第一個循環結束的事實。這就是爲什麼A始終是第一個列表框的最後一個值。嵌套的循環,而不是:

private void button1_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listBox1.Items.Count; i++) 
    { 
     A = listBox1.Items[i].ToString(); 

     for (int j = 0; j < listBox2.Items.Count; j++) 
     { 
      B = listBox2.Items[j].ToString(); 

      listBox3.Items.Add(A + ": " + B); 
     } 
    } 
} 
2

如果你想使用LINQ那麼這很好地工作:

 var items = 
      from A in listBox1.Items.Cast<string>() 
      from B in listBox2.Items.Cast<string>() 
      select A + ": " + B; 

     listBox3.Items.AddRange(items.ToArray()); 
+0

大多數C#-esque解決方案(和最好的),imo。 – Tetramputechture

+1

@Tetramputechture - 我也這麼認爲。我個人喜歡它,因爲我可以快速瀏覽它並告訴它是正確的。 ''for'-loop方法很難做到這一點。 – Enigmativity

相關問題