如何添加10个项目

时间:2011-07-09 09:21:48

标签: c# listview listbox .net-2.0 undo-redo

我有undoredomanager。 我需要在listview中查看只有10个条目。 已经沸腾了大脑怎么做。

此代码将添加到视图列表的所有记录中,但我只需要最后10个。

lvUndoStack.Items.Clear();
var list = new List<object>();
foreach (var command in UndoRedoManager.UndoCommands)
{
    list.Insert(0, command.ToString());
}
lvUndoStack.Items.AddRange(list.ToArray());
lvUndoStack.SelectedIndex = lvUndoStack.Items.Count - 1;
indexSeletedItemUndoStack = lvUndoStack.SelectedIndex;

list = new List<object>();
foreach (var command in UndoRedoManager.RedoCommands)
{
    list.Insert(0, command.ToString());
}
lvUndoStack.Items.AddRange(list.ToArray());

重要 - 未使用linq

更新

示例:

undo1
undo2
undo3
undo4
undo5
undo6
undo7
redo1
redo2
redo3
redo4
redo5

我需要obly 10.如果启动undo4然后你需要显示最后一个或最多10个

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想要(最多)最后10个撤销和最后10个重做命令。获得撤消命令列表后,使用此命令直到最后10:

if (list.Count <= 10)
{
    lvUndoStack.Items.AddRange(list.ToArray());
}
else
{
    for (int i = 0; i < 10; i++)
    {
        lvUndoStack.Items.Add(list[0]);
    }
}

对重做命令也这样做。这不是最好的解决方案,IMO - 实际上更像是一个kludge,但它应该让你朝着正确的方向前进。

更好的解决方案是修改/增强UndoRedoManager类,以便ListView可以调用方法来获取最后一个 n undo / redo命令的列表。类似的东西:

public List<Object> GetUndoCommands(int numberOfCommands);

然后ListView可以简单地调用该方法:

lvUndoStack.Items.AddRange(UndoRedoManager.GetUndoCommands(10).ToArray());

类似于重做命令。它从您的UI层中删除了一堆代码,并且您可以灵活地在以后轻松切换最大数量的项目,而且通常(再次IMO)似乎是一种更好的方法。