我有几个TextBox,它们共享相同的TextChanged
侦听器。
private void text1_TextChanged(object sender, TextChangedEventArgs e)
{
CommandManager.InvokeExecute(new SaveUpdateCommand((TextBox)sender));
}
当事件发生时,旧的TextBox
对象将被置于堆栈中:
internal static class CommandManager
{
private static Stack<Command> commandStack = new Stack<Command>();
internal static void InvokeExecute(Command cmd)
{
cmd.Execute();
commandStack.Push(cmd);
}
internal static void InvokeUndo()
{
if (commandStack.Count > 0) commandStack.Pop().Undo();
}
}
然而,要撤消工作,我需要两次单击InvokeUndo按钮,我无法弄清楚原因。除了必要的双击一切都很好。这是Command实现。
internal class SaveUpdateCommand : Command
{
private TextBox textBox;
private string oldText;
public SaveUpdateCommand(TextBox textBox)
{
this.textBox = textBox;
this.oldText = textBox.Text;
}
internal override void Execute()
{
//Not implemented within this command.
}
internal override void Undo()
{
textBox.Text = oldText;
}
}
感谢您的任何见解。 GUI是使用带有WPF的VS2015设计器完成的。
答案 0 :(得分:1)
很久以前我写过这样一个undo/do-again
课程&amp;&amp;识别完全相同的错误。
恕我直言,这取决于以下内容:
exe
命令:<------------------------------+
|
|
undo
按钮:|
|
|
|
------------------------+
这就是为什么你必须双击你认为文本改变的undo
按钮...
实际上文字已更改,但由于它保持不变,您不通过任何 UI更新识别它。
你看到漂亮的ASCII箭头? ^^