我做了一个扩展方法来交换 CheckedListBox 中两个项目的位置。该方法放在静态实用程序类中。问题是 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);