软糖来回答罗
先在窗体上添加控件 richTextBox1 和右键菜单 contextMenuStrip1
在 contextMenuStrip1 中添加两个子菜单项
撤销ToolStripMenuItem
重做ToolStripMenuItem
然后在窗体class中添加以下代码
private List<string> 撤销list = new List<string>()private List<string> 重做list = new List<string>()
private int 最大撤销次数 = -1
private bool 是撤销记录 = false
private string 临时文本
private void Form1_Load(object sender, EventArgs e) {
richTextBox1.ContextMenuStrip = contextMenuStrip1
}
public void 设置最大撤销次数(int _undoCount) {
//校正最大撤销/重做次数
最大撤销次数 = _undoCount + 1
//上一句的原因
撤销list.Add("")
}
public void 记录更改(string str) {
临时文本 = str
if (!是撤销记录)
{
撤销list.Add(str)
if (最大撤销次数 > 0 && 撤销list.Count > 最大撤销次数)
{
撤销list.RemoveAt(0)
}
} else
{
是撤销记录 = false
}
}
public void 撤销() {
if (撤销list.Count <= 1)
return
是撤销记录 = true
重做list.Add(撤销list[撤销list.Count - 1])
撤销list.RemoveAt(撤销list.Count - 1)
临时文本 = 撤销list[撤销list.Count - 1]
}
public void 重做() {
if (重做list.Count <= 0)
return
临时文本 = 重做list[重做list.Count - 1]
重做list.RemoveAt(重做list.Count - 1)
}
private void richTextBox1_TextChanged(object sender, EventArgs e) {
记录更改(richTextBox1.Text)
}
private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e) {
撤销()
richTextBox1.Text = 临时文本
}
private void 重做ToolStripMenuItem_Click(object sender, EventArgs e) {
重做()
richTextBox1.Text = 临时文本
}
满意请采纳,谢谢。
首先你要确定GetMenu()函数是否返回了正确的菜单指针,很有可能这个是野指针或者空指针,导致后面调用出错;注释后需要确定重新编译了再运行,如果还出现一样的结果,只能证明是下面的代码 有问题,或者是你模仿的有问题,或者是他原来的代码有问题,计算机是不会骗人的。
这个需要你添加断点跟踪看才能准确的分析和定位问题,也是一种基本的能力
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)