【问题标题】:Validating preexistence of items when transfering from a ListBox to ComboBox从 ListBox 转移到 ComboBox 时验证项目是否存在
【发布时间】:2016-05-03 23:10:09
【问题描述】:

在 C# 中,我有一个 ListBox 和一个 ComboBox。我正在尝试将我的所有项目从我的 ListBox 传输到我的 ComboBox,同时检查项目是否已经存在于 ComboBox 上。重复的项目不应该被转移,而其余的应该从 ListBox 中删除。我还打算将项目从 ComboBox 转移到我的 ListBox 中。

我几乎完成了所有工作,但是删除传输的项目并没有正常工作,因为我遇到了一些索引问题。

我从 List 转移到 Cbx 时的代码

String[] items = intoArrayLst(lstItem2);
ArrayList moved = new ArrayList();

for (int i = 0; i < items.Length; i++)
{

   if (!cbxItem.Items.Contains(items.ElementAt(i)))
   {
     cbxItem.Items.Add(items.ElementAt(i));
     moved.Add(items.ElementAt(i));
   }
}

for (int i = 0; i < lstItem2.Items.Count; i++)
{
   if(moved.Contains(lstItem2.Items.GetItemAt(i)))
   {
    lstItem2.Items.RemoveAt(i);                        
   }
}

从组合框到列表框

String[] items = intoArrayCBX(cbxItem);
ArrayList moved = new ArrayList();

for (int i = 0; i < items.Count(); i++)
{
    if(!lstItem2.Items.Contains(items.ElementAt(i)))
    {
        lstItem2.Items.Add(items.ElementAt(i));
        moved.Add(items.ElementAt(i));
    }                        
}

for (int i = 0; i < cbxItem.Items.Count; i++)
{
    if(cbxItem.Items.Contains(moved[i]))
    {
        cbxItem.Items.RemoveAt(i);                        
    }                        
}

非常感谢有关如何修复它的一些建议。

【问题讨论】:

    标签: c# combobox listbox


    【解决方案1】:

    从列表中删除项目时避免索引问题的一个好方法是向后循环列表。这样一来,在移除时会发生索引移动的项目已经被处理了。

    for (int i = lstItem2.Items.Count - 1; i >= 0; i--)
    {
        if (!cbxItem.Items.Contains(lstItem2.Items[i]))
        {
            cbxItems.Items.Add(lstItems2.Items[i]);
            lstItems2.Items.RemoveAt(i);
        }
    }
    

    【讨论】:

    • 我总是忘记反向循环的力量。谢谢,我花了好几个小时思考这个问题。
    猜你喜欢
    • 2022-01-19
    • 2021-01-23
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多