CheckedListBox 内の 2 つの項目の場所を交換する拡張メソッドを作成しました。メソッドは、静的 Utilities クラスに配置されます。問題は、CheckState が移動しないことです。したがって、チェックされたアイテムをリストの上に移動すると、チェックボックスの状態は維持され、移動したアイテムは、置き換えられたアイテムから CheckState を引き継ぎます。
私のコードは次のようになります。
public static System.Windows.Forms.CheckedListBox.ObjectCollection Swap(this System.Windows.Forms.CheckedListBox.ObjectCollection lstBoxItems, int indexA, int indexB)
{
if (indexB > -1 && indexB < lstBoxItems.Count - 1)
{
object tmpItem = lstBoxItems[indexA];
lstBoxItems[indexA] = lstBoxItems[indexB];
lstBoxItems[indexB] = tmpItem;
}
return lstBoxItems;
}
私が欲しいのはこのようなものです(明らかに機能しません)
public static System.Windows.Forms.CheckedListBox.ObjectCollection Swap(this System.Windows.Forms.CheckedListBox.ObjectCollection lstBoxItems, int indexA, int indexB)
{
if (indexB > -1 && indexB < lstBoxItems.Count - 1)
{
object tmpItem = lstBoxItems[indexA];
System.Windows.Forms.CheckState state = tmpItem.CheckState;
lstBoxItems[indexA] = lstBoxItems[indexB];
lstBoxItems[indexB] = tmpItem;
}
return lstBoxItems;
}
コードは次のように単純に呼び出されます
myCheckedListBox.Items.Swap(selectedIndex, targetIndex);