我在Windows窗体应用程序中有一个ListBox。 我可以使用以下脚本轻松地在列表框中上下移动单个项目:
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);
如何移动多个所选项目?谢谢大家!
答案 0 :(得分:1)
我认为没有一种特定的方法可以在列表框中移动List。有一个AddRange()可以将它全部设置到列表的底部。
您可以尝试制作自己的InsertRange()。
List<object> toInsert = new List<object>();
toInsert.Add(selected);
InsertRange(int startIndex){
foreach(object o in toInsert){
inputFiles.Items.Insert(startIndex, o);
startIndex++;
}
}
这可能不会完全正常,但我认为这可能是你所要求的。
答案 1 :(得分:1)
如果将所选索引复制到数组中,则可以循环遍历项目并相应地更新索引:
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();
}
答案 2 :(得分:0)
这对我有用。
/// <summary>
/// Extension allow move with multiple selected items
/// </summary>
static class ListBoxExtension {
/// <summary>
/// Moves the selected items up one level
/// </summary>
/// <param name="xListBox"></param>
public static void MoveUp(ListBox xListBox) {
if(xListBox.SelectedItems.Count > 0) {
if(xListBox.SelectedIndices[0] > 0) {
foreach(int i in xListBox.SelectedIndices) {
object NewItem = xListBox.Items[i];
xListBox.Items.Remove(NewItem);
xListBox.Items.Insert(i - 1, NewItem);
xListBox.SelectedItem = NewItem;
}
}
}
}
/// <summary>
/// Moves the selected items one level down
/// </summary>
/// <param name="xListBox"></param>
public static void MoveDown(ListBox xListBox) {
if(xListBox.SelectedItems.Count > 0) {
int LastSelectedIndex = xListBox.SelectedIndices[xListBox.SelectedIndices.Count - 1];
int LastIndex = xListBox.Items.Count - 1;
if(LastSelectedIndex < LastIndex) {
foreach(int i in xListBox.SelectedIndices) {
object NewItem = xListBox.Items[i];
xListBox.Items.Remove(NewItem);
xListBox.Items.Insert(i + 1, NewItem);
xListBox.SelectedItem = NewItem;
}
}
}
}
}