将两个列表框中的项目合并到第三个列表框中

时间:2015-09-06 03:46:58

标签: c#

我正在尝试组合两个列表框的内容,这样如果ListBox 1中有A,B,C,而ListBox 2中有1,2,3,则ListBox 3中的输出将为:A1,A2, A3,B1,B2,B3,C1,C2,C3。我的下面的代码几乎可以做到这一点,但是它会在A和B迭代中进行写入,并且只显示C迭代。我在这里缺少什么?

字符串A; 字符串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);
    }
}

3 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分: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循环移动到第一个。这应该有用。

答案 2 :(得分: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());