【问题标题】:Move items from one listbox to another将项目从一个列表框移动到另一个
【发布时间】:2009-10-29 15:24:40
【问题描述】:

我想将项目从一个列表视图移动到另一个。将它们添加到第二个有效,但移动的条目根本不会被删除。

private void MoveSelItems(ListBox from, ListBox to)
    {
        for (int i = 0; i < from.SelectedItems.Count; i++)
        {
            to.Items.Add(from.SelectedItems[i].ToString());
        }

        from.Items.Remove(to.SelectedItem);
    }

我正在使用 C#/Winforms/-NET 3.5

【问题讨论】:

  • 这是因为“to”列表框不会自动选择您添加到其中的项目,因此“from.Items.Remove(to.SelectedItem)”什么都不做,因为“to.SelectedItem”它没有刚刚添加的任何项目

标签: c# winforms listbox


【解决方案1】:

在循环结束时尝试此代码

foreach ( var item in new ArrayList(from.SelectedItems) ) {
  from.Items.Remove(item);
}

【讨论】:

    【解决方案2】:
    private void MoveSelItems(ListBox from, ListBox to)
    {
        while (from.SelectedItems.Count > 0)
        {
            to.Items.Add(from.SelectedItem[0]);
            from.Items.Remove(from.SelectedItem[0]);
        }
    }
    

    【讨论】:

      【解决方案3】:
      private void MoveSelItems(ListBox from, ListBox to)
          {
              for (int i = 0; i < from.SelectedItems.Count; i++)
              {
                  to.Items.Add(from.SelectedItems[i].ToString());
                  from.Items.Remove(from.SelectedItems[i]);
              }
          }
      

      虽然

      Items.RemoveAt(i) 可能更快,如果这很重要的话。

      您可能需要创建一个持有列表。

          //declare
          List<Object> items = new List<Object>();
          for (int i = 0; i < from.SelectedItems.Count; i++)
          {
              items.Add(from.SelectedItems[i]);
          }
          for (int i = 0; i < items.Count; i++)
          {
              to.Items.Add(items[i].ToString());
              from.Items.Remove(items[i]);
          }
      

      【讨论】:

      • 我不相信这会起作用,因为您将在迭代时更改集合。你会错过项目。
      • 好问题。编辑“项目”会改变“选定项目”吗?可能是。在这种情况下,他需要将它们读入一个临时数组。编辑以表示这一点。
      • 那是我在想,因为数组越来越小,所以我会得到一个索引错误
      【解决方案4】:
                    for (int i = 0; i < ListBox3.Items.Count; i++)
                     {
                          ListBox4.Items.Add(ListBox3.Items[i].Text);
                          ListBox3.Items.Remove(ListBox3.SelectedItem);
      
                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多