C# - 如何在列表框(Windows 窗体)内上下移动多个项目

标签 c# winforms listbox

我在 Windows 窗体应用程序中有一个列表框。 我可以使用以下脚本轻松地在列表框中上下移动单个项目:

int newIndex = inputFiles.SelectedIndex + direction;

if (newIndex < 0)
   newIndex = inputFiles.Items.Count-1;

if (newIndex >= inputFiles.Items.Count)
    newIndex = 0;

object selected = inputFiles.SelectedItem;

inputFiles.Items.Remove(selected);
inputFiles.Items.Insert(newIndex, selected);
inputFiles.SetSelected(newIndex, true);

如何移动多个选定的项目?谢谢大家!

最佳答案

如果将所选索引复制到数组中,则可以循环遍历项目并适当更新索引:

private void btnDown_Click(object sender, EventArgs e) {
  listBox1.BeginUpdate();
  int[] indexes = listBox1.SelectedIndices.Cast<int>().ToArray();
  if (indexes.Length > 0 && indexes[indexes.Length - 1] < listBox1.Items.Count - 1) {
    for (int i = listBox1.Items.Count - 1; i > -1; --i) {
      if (indexes.Contains(i)) {
        object moveItem = listBox1.Items[i];
        listBox1.Items.Remove(moveItem);
        listBox1.Items.Insert(i + 1, moveItem);
        listBox1.SetSelected(i + 1, true);
      }
    }
  }
  listBox1.EndUpdate();
}

private void btnUp_Click(object sender, EventArgs e) {
  listBox1.BeginUpdate();
  int[] indexes = listBox1.SelectedIndices.Cast<int>().ToArray();
  if (indexes.Length > 0 && indexes[0] > 0) {
    for (int i = 0; i < listBox1.Items.Count; ++i) {
      if (indexes.Contains(i)) {
        object moveItem = listBox1.Items[i];
        listBox1.Items.Remove(moveItem);
        listBox1.Items.Insert(i - 1, moveItem);
        listBox1.SetSelected(i - 1, true);
      }
    }
  }
  listBox1.EndUpdate();
}

关于C# - 如何在列表框(Windows 窗体)内上下移动多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883526/

相关文章:

c# - 在 Windows 8.1 上禁用触摸视觉反馈(以编程方式)[桌面应用程序]

c# - 在机器上的所有网站上包括 Javascript

c# - 以管理员身份运行多个应用程序

c# - Entity Framework 4.1 InverseProperty 属性和 ForeignKey

c# - 在c# winform中选择DataGridView的一列值

c# - 窗体和控件背景图像未在 "some"计算机上显示

c# - 如何使用控制台隐藏样式运行 C# 控制台应用程序?

wpf - 当集合更改时保留绑定(bind)的 WPF ListBox 的滚动位置

当按下向右或向左箭头键时,C# 阻止列表框控件的默认操作

c# - 在 Listbox 上使用自定义 DataTemplate 时,SelectedItem 绑定(bind)停止工作