【问题标题】:C# multiple selection listbox moveC#多选列表框移动
【发布时间】:2009-12-16 04:02:30
【问题描述】:

我有两个列表框。

在 listbox1 中,我希望用户能够单击一个按钮并将所有选定的项目移动到列表框 2。此外,如果没有选择任何内容,我不希望按钮工作。有人有什么建议吗?

listbox1.items.add(listbox2.selecteditems);只是移动(集合)到第二个列表框。

【问题讨论】:

    标签: c#


    【解决方案1】:

    我猜你需要单独移动这些项目:

    List<object> itemsToRemove = new List<object>();
    
    foreach (var item in listbox2.SelectedItems)
    {
        listbox1.Items.Add(item);
        itemsToRemove.Add(item);
    }
    
    foreach (var item in itemsToRemove)
    {
        listbox2.Items.Remove(item);
    }
    

    这会将所有选定的项目从listbox2 移动到listbox1itemsToRemove 列表用作临时存储,因为在迭代集合时不能修改集合;在迭代时,我们只是将要删除的项目的引用添加到一个临时列表中,然后我们迭代该列表并删除这些项目。

    为了处理没有选择项目的情况,我会为SelectedIndexChanged事件设置一个事件处理程序,并设置按钮的Enabled属性:

    theButton.Enabled = (listbox2.SelectedItems.Count > 0);
    

    【讨论】:

    • 好电话,我忘了从原始列表中删除它们。
    【解决方案2】:

    这是一个使用 Linq 的解决方案:

    private void buttonMove_Click(object sender, EventArgs e)
    {
        foreach (var item in listBox1.SelectedItems.OfType<object>().ToArray())
        {
            listBox1.Items.Remove(item);
            listBox2.Items.Add(item);
        }
    }
    
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        buttonMove.Enabled = listBox1.SelectedItems.Count > 0;
    }
    

    【讨论】:

    • +1,.ToArray() 很重要,因此您不会在foreach 期间修改集合。
    【解决方案3】:

    对于 Winforms:

    foreach (var i in listbox1.SelectedItems) {
         listbox2.SelectedItems.add(i);
    }
    

    仅在必要时启用按钮,将代码添加到OnSelectionChanged 事件并设置button1.enabled = (Listbox1.SelectedItems.Count &gt; 0);

    【讨论】:

      【解决方案4】:
      if (listbox1.SelectedItems.Count == 0)
      {
          return;
      }
      
      // Do this if you want to clear the second ListBox
      listbox2.Items.Clear();
      
      foreach (object obj in listbox1.SelectedItems)
      {
          listbox2.Items.Add(obj);
      }
      

      【讨论】:

        【解决方案5】:

        对于 Listbox1,使用 SelectedItemChanged 事件并使用您提供的 EventArgs 来获取所选项目 -> 然后添加到 listbox2。

        如果没有选择任何项目 button.enbable = false;

        【讨论】:

          猜你喜欢
          • 2017-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-29
          相关资源
          最近更新 更多