richtextbox1.text=richtextbox1.text.insert(start,"插入内容");这样子不能撤销,如果是richtextbox1.appendtext();可以撤销,为什么呢?怎么解决往文本中间插入文本并能撤销。我做的是记事本中的插入日期和时间

解决方案 »

  1.   

    不要直接插,用剪贴板中转,这样就可以UnDo/ReDo了:Clipboard.SetText(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
    richTextBox1.Paste();//在当前光标所在位置插入
    Clipboard.Clear();
      

  2.   

    请使用下面的方法插入文本:
    SelectionStart 为位置,SelectedText 为要插入的文本,SelectionLength 总是0        private void btInsert_Click(object sender, EventArgs e)
            {
                richTextBox1.SelectionStart = 1;
                richTextBox1.SelectionLength = 0;
                richTextBox1.SelectedText = "hahahaha";
            }        private void btUndo_Click(object sender, EventArgs e)
            {
                richTextBox1.Undo();
            }
      

  3.   

    自带的Redo()和Undo()方法
    private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.contextMenuStrip2.SourceControl.Select();
                RichTextBox rtb = (RichTextBox)this.contextMenuStrip2.SourceControl;
                rtb.Undo();        }
      

  4.   

    不能直接赋值,赋值不是操作,如果是用的richbox自带的撤销函数,那么赋值不是操作,不可以撤销。撤销函数针对的是复制,粘贴这样的“操作”过程。楼上的方法都可以解决,一般还是觉得用剪切板比较恰当。