在VS2010中实现C#富文本框添加右键菜单

实现右键弹出下图这种,C#语言!
2025-05-22 20:47:49
推荐回答(1个)
回答1:

软糖来回答罗

先在窗体上添加控件 richTextBox1 和右键菜单 contextMenuStrip1

contextMenuStrip1 中添加两个子菜单项

撤销ToolStripMenuItem

重做ToolStripMenuItem

然后在窗体class中添加以下代码

private List 撤销list = new List();
        private List 重做list = new List();
        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 = 临时文本;
        }

满意请采纳,谢谢。