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重绘地图。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...