/// <summary>
/// 向上向下移动元素
/// </summary>
/// <param name="listBox">需要操作的ListBox</param>
/// <param name="isUp">判断向上还是向下移动元素;true,向上;false,向下</param>
/// <returns></returns>
public static bool MoveSelectedItems(this ListBox listBox, bool isUp)
{
bool result = true;
ListBox.SelectedIndexCollection indices = listBox.SelectedIndices;
if (isUp)
{
if (listBox.SelectedItems.Count > 0 && indices[0] != 0)
{
foreach (int i in indices)
{
result &= MoveSelectedItem(listBox, i, true);
}
}
}
else
{
if (listBox.SelectedItems.Count > 0 && indices[indices.Count - 1] != listBox.Items.Count - 1)
{
for (int i = 0; i < indices.Count; i++)
{
result &= MoveSelectedItem(listBox, indices[i], false);
}
}
}
return result;
}
/// <summary>
/// 向上向下移动元素
/// </summary>
/// <param name="listBox">需要操作的ListBox</param>
/// <param name="selectedIndex">选中的项</param>
/// <param name="isUp">判断向上还是向下移动元素;true,向上;false,向下</param>
/// <returns></returns>
private static bool MoveSelectedItem(this ListBox listBox, int selectedIndex, bool isUp)
{
if (selectedIndex != (isUp ? 0 : listBox.Items.Count - 1))
{
object current = listBox.Items[selectedIndex];
int insertAt = selectedIndex + (isUp ? -1 : 1);
listBox.Items.RemoveAt(selectedIndex);
listBox.Items.Insert(insertAt, current);
listBox.SelectedIndex = insertAt;
return true;
}
return false;
}
/// 向上向下移动元素
/// </summary>
/// <param name="listBox">需要操作的ListBox</param>
/// <param name="isUp">判断向上还是向下移动元素;true,向上;false,向下</param>
/// <returns></returns>
public static bool MoveSelectedItems(this ListBox listBox, bool isUp)
{
bool result = true;
ListBox.SelectedIndexCollection indices = listBox.SelectedIndices;
if (isUp)
{
if (listBox.SelectedItems.Count > 0 && indices[0] != 0)
{
foreach (int i in indices)
{
result &= MoveSelectedItem(listBox, i, true);
}
}
}
else
{
if (listBox.SelectedItems.Count > 0 && indices[indices.Count - 1] != listBox.Items.Count - 1)
{
for (int i = 0; i < indices.Count; i++)
{
result &= MoveSelectedItem(listBox, indices[i], false);
}
}
}
return result;
}
/// <summary>
/// 向上向下移动元素
/// </summary>
/// <param name="listBox">需要操作的ListBox</param>
/// <param name="selectedIndex">选中的项</param>
/// <param name="isUp">判断向上还是向下移动元素;true,向上;false,向下</param>
/// <returns></returns>
private static bool MoveSelectedItem(this ListBox listBox, int selectedIndex, bool isUp)
{
if (selectedIndex != (isUp ? 0 : listBox.Items.Count - 1))
{
object current = listBox.Items[selectedIndex];
int insertAt = selectedIndex + (isUp ? -1 : 1);
listBox.Items.RemoveAt(selectedIndex);
listBox.Items.Insert(insertAt, current);
listBox.SelectedIndex = insertAt;
return true;
}
return false;
}