2016-05-03 4 views
1

C#ではListBoxとComboBoxがあります。アイテムが既にComboBoxに存在するかどうかを確認しながら、ListBoxからComboBoxにすべてのアイテムを転送しようとしています。反復されたアイテムは転送されず、残りはリストボックスから削除されます。私はまた、ComboBoxからListBoxに同じ項目を転送することを意図しています。ListBoxからComboBoxへの転送時の項目の事前検証

私はすべての作業をほぼ完了しましたが、転送されたアイテムを削除することは、インデックス作成上の問題があるため、正しく機能しません。

私のコードのListBox

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);       
    }       
} 

にコンボボックスから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);       
    } 
} 

に一覧から転送それを修正する方法についていくつかの提案を本当にいただければ幸いです。

答えて

0

リストからアイテムを削除するときにインデックスを作成しないようにする良い方法は、リストを逆向きにループすることです。このようにして、削除時にインデックスシフトされたアイテムはすでに処理されています。

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); 
    } 
} 
+0

逆ループのパワーを常に忘れています。ありがとう、これについて考える時間のために私の頭を傷つけている。 –

関連する問題