-1

私はアンドレスマネージャーを持っています。リストビューで表示する必要があるのは、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

10 が必要です。元に戻す 4 を開始する場合は、最後または最大 10 のすべてを表示する必要があります。

4

1 に答える 1

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]);
    }
}

また、REDOコマンドについても同じようにします。これは最善の解決策ではありません、IMO-実際にはもっと厄介ですが、それはあなたを正しい方向に向かわせるはずです。

さらに良い解決策は、UndoRedoManagerクラスを変更/拡張して、ListViewがメソッドを呼び出して最後のn個のundo/redoコマンドのリストを取得できるようにすることです。何かのようなもの:

public List<Object> GetUndoCommands(int numberOfCommands);

次に、ListViewはそのメソッドを単純に呼び出すことができます。

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

そして、REDOコマンドにも似たようなものがあります。UIレイヤーから大量のコードを削除し、後日、アイテムの最大数を簡単に切り替える柔軟性を提供します。一般的には(IMOも)より良い方法のようです。

于 2011-07-09T21:58:36.440 に答える