C#撤消/重做代码什么都不做

| 对于我的图块编辑器,我有2叠TileMaps,撤消和重做。每次用户进行更改时,都会将地图的状态添加到堆栈中,然后进行更改。这是我的撤消代码:
private void undoToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (undo.Count != 0)
        {
            redo.Push(tileMap);
            tileMap = undo.Peek();
            undo.Pop();
        }
    }
但是,地图不会更改。为什么?     
已邀请:
        如果不是UI更新问题... 您是否重做和撤消了对不同堆栈对象的引用?如果它们都引用同一个堆栈对象,那么您的代码将仅推送并弹出当前状态。 还是类似地,您是否要推送另一个对相同tileMap对象或它的副本的引用? (即,您可能想要
Push(tileMap.DeepCopy())
) 另外,为什么要先窥视然后弹出?您可以直接直接弹出tileMap中。     
        如果撤消和重做只是堆栈对象,则什么也不会发生。相反,您需要添加代码以在撤消操作时实际更新UI。在这种情况下,我想您会使用从堆栈中弹出的当前tileMap重绘地图。     

要回复问题请先登录注册