C # отменить / повторить код ничего не делает - PullRequest
0 голосов
/ 13 июня 2011

для моего редактора плиток у меня есть 2 стека TileMaps, отменить и повторить. Каждый раз, когда пользователь вносит изменения, состояние карты добавляется в стек, после чего производится изменение. Вот мой код отмены:

private void undoToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (undo.Count != 0)
        {
            redo.Push(tileMap);
            tileMap = undo.Peek();
            undo.Pop();
        }
    }

Карта, однако, не меняется. Зачем?

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Если отменить и повторить - это просто объекты стека, то ничего не должно произойти . Вместо этого вам нужно добавить код для фактического обновления пользовательского интерфейса, когда происходит отмена. В этом случае, я полагаю, вы бы перерисовали карту, используя текущий tileMap, как вытолкнутый из стека.

0 голосов
/ 13 июня 2011

Если это не проблема обновления пользовательского интерфейса ...

Ваши повторения и отмены ссылок на различные объекты стека? Если они оба ссылаются на один и тот же объект стека, то ваш код просто выдвинет и подтвердит текущее состояние.

Или аналогично, вы нажимаете другую ссылку на тот же объект tileMap или копию его? (т. е. вы, вероятно, хотите Push(tileMap.DeepCopy()))

Кроме того, почему ты заглядываешь, а потом поп? Вы можете просто зайти прямо в tileMap.

...