/// <summary> /// 下へ移動を実装します。 /// </summary> /// <param name="allItems">全アイテムのコレクション。(例:ListView.Items)</param> /// <param name="targetIndices">対象インデックスのコレクション。(例:ListView.SelectedIndices)</param> public static void MoveDown(IList allItems, IList targetIndices) { if (!ListOperation.CanMoveDown(allItems, targetIndices)) { return; } int index0 = allItems.Count; for (int i = targetIndices.Count - 1; i >= 0; i--) { int index = (int)targetIndices[i]; if (index0 - index > 1) { object item = allItems[index]; allItems.RemoveAt(index); allItems.Insert(index + 1, item); //移動に成功した場合、indexは+1する。(次の選択indexが連続していた場合でも移動できるようにするため) //ex)2,3が選択されていた場合、3⇒4になるので、2⇒3になるはず。 index++; } index0 = index; } }
/// <summary> /// 上へ移動を実装します。 /// </summary> /// <param name="allItems">全アイテムのコレクション。(例:ListView.Items)</param> /// <param name="targetIndices">対象インデックスのコレクション。(例:ListView.SelectedIndices)</param> public static void MoveUp(IList allItems, IList targetIndices) { if (!ListOperation.CanMoveUp(targetIndices)) { return; } int index0 = -1; for (int i = 0; i < targetIndices.Count; i++) { int index = (int)targetIndices[i]; if (index - index0 > 1) { object item = allItems[index]; allItems.RemoveAt(index); allItems.Insert(index - 1, item); //移動に成功した場合、indexは-1する。(次の選択indexが連続していた場合でも移動できるようにするため) //ex)2,3が選択されていた場合、2⇒1になるので、3⇒2になるはず。 index--; } index0 = index; } }