1 回答

TA贡献1921条经验 获得超9个赞
我会得到你的问题的几行并向你解释:
Stack<string> undoList = new Stack<string>(); //Creates new EMPTY Stack
undoList.Push(txtMain.Text); //Add object to the top of the Stack
undoList.Pop(); //Removes object that is on top of the Stack
所以现在你有了TextBox,当你输入一些东西时textbox.Text,它自己的属性会发生变化(而不是你影响它)。然后,除了将属性旧文本更改为顶部之外,您还创建event了“也” 。textPush()Stack
现在,在文本更改后,您“拥有”(您没有,我稍后会解释)您的字符串位于stack您的顶部和内部textbox
现在,当您按下Undo按钮时,您需要做两件事。
将textBox.Text属性设置为堆栈中的顶部对象
删除栈顶对象
目前你正在做的只是第二件事:
undoList.Pop();
但是在此之前您忘记输入的是:
textBox1.Text = undoList.Pop();
这样,您将Text在堆栈顶部设置属性和删除对象。
现在让我们把你还给我you do not have i will explain it later。
我已经说过了,因为txtMain_TextChanged被解雇AFTER的文本被改变了。
因此,当您txtMain.Text更改文本后,您将获得新值而不是旧值。
此外,每次输入 1 个字符时,您都会更新旧文本。
解决方案是使用Enter事件
private void textBox1_Enter(object sender, EventArgs e)
{
//it fires only when you enter textbox with mouse click/tab/etc
//Here add your OLD VALUE to top of stack
}
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报