Вам необходимо опубликовать код для moveListBoxItem, чтобы мы могли помочь.
Я подозреваю, что moveListBoxItem выглядит примерно так.
void moveListBoxItem(CheckedListBox list, int oldIndex, int newIndex ) {
object old = list.Items[oldIndex];
list.Items.RemoveAt(oldIndex);
list.Items.Insert(newIndex, old);
}
В этом случае причина, по которой он не работает, заключается в том, что после удаления объекта CheckedListBox больше не отслеживает проверенное состояние определенного индекса. Вам нужно будет добавить это позже.
void moveListBoxItem(CheckedListBox list, int oldIndex, int newIndex ) {
var state = list.GetItemCheckedState(oldIndex);
object old = list.Items[oldIndex];
list.Items.RemoveAt(oldIndex);
list.Items.Insert(newIndex, old);
list.SetItemCheckedState(newIndex, state);
}
РЕДАКТИРОВАТЬ: Обновление для фактического кода moveListBoxItem. Вам также необходимо распространить CheckState на новый индекс. Удаление этого из коллекции по существу очищает сохраненное состояние.
private void moveListboxItem(CheckedListBox ctl, int fromIndex,int toIndex)
{
if(fromIndex == toIndex)
{
return;
}
if(fromIndex < 0 )
{
fromIndex = ctl.SelectedIndex;
}
if(toIndex < 0 || toIndex > ctl.Items.Count - 1)
{
return;
}
object data = ctl.Items[fromIndex];
CheckState state = ctl.GetItemCheckState(fromIndex);
ctl.Items.RemoveAt(fromIndex);
ctl.Items.Insert(toIndex, data);
ctl.SetItemCheckState(toIndex, state);
ctl.SelectedIndex = toIndex;
}