【问题标题】:C# Listboxes Copy not MoveC# 列表框复制不移动
【发布时间】:2016-02-02 20:50:21
【问题描述】:

我需要将 Listbox1 中的项目复制到 Listbox2。我正在使用这个 MOVE 代码 sn-p。对于单个项目(btnAdd1),我只需注释掉“删除”行,所有工作都按预期工作。但是对于多选(btnAdd2),如果我注释掉“删除”行,程序就会挂起......但是如果我把它留在里面,它就可以工作。有什么想法吗?

private void btnAdd1_Click_1(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select an Item");
        }
        else
        {
            if (!listBox2.Items.Contains(listBox1.SelectedItem))
            {
                listBox2.Items.Add(listBox1.SelectedItem);
            }
         }
    }

    private void btnAdd2_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select Multiple Items");
        }
        else
        {
            while(listBox1.SelectedItems.Count != 0)
            {
                if (!listBox2.Items.Contains(listBox1.SelectedItem))
                {
                    listBox2.Items.Add(listBox1.SelectedItems[0]);
                    // If this line is missing, the program hangs
                    listBox1.Items.Remove(listBox1.SelectedItems[0]);
                }
            }
        }
    }

【问题讨论】:

  • 您必须在调试器中运行它才能确定,但​​我怀疑while(listBox1.SelectedItems.Count != 0) 永远不会因为某种原因变为假。无论是从列表中删除项目还是从列表中删除项目都不会将其从 SelectedItems 集合中删除。

标签: c# listbox listboxitems


【解决方案1】:

你有一个while循环。如果删除该行,while 循环的条件将为真。 你的代码应该是这样的:

foreach(var item in listbox1.SelectedItems)
if (!listbox2.items.contain(item)
    listbox2.items.add(item);

【讨论】:

  • 但是该项目并没有从listbox1 中删除,并且删除项目可能会使foreach 无效,因为基础集合已被修改。
  • 将我的 foreach 更改为 for 并从上到下计数。我忘了你想搬家。但它也是一个简单的。它只需要一点改变
【解决方案2】:

谢谢大家,我已经采用了其中的一些方法,现在一切都如我所愿。这是最终代码。

private void btnAdd2_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select Multiple Items");
        }
        else
        {
            if (!listBox2.Items.Contains(listBox1.SelectedItem))
            {
                foreach (var item in listBox1.SelectedItems)
                {
                    listBox2.Items.Add(item);
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多