插入代码并撤消

时间:2013-11-12 20:06:45

标签: .net vb.net

我目前正在制作一个“WYSIWYG”(你看到的是你得到的)HTML编辑器。我将这个用于个人用途,以拓宽我对VB.Net的理解。我遇到的问题是当我使用这段代码时:

Dim insertText = "<h1>Example Header</h1>"
Dim insertPos As Integer = RichTextBox1.SelectionStart
RichTextBox1.Text = RichTextBox1.Text.Insert(insertPos, insertText)
RichTextBox1.SelectionStart = insertPos + insertText.Length

通过添加RichTextBox中的文本,代码将完美地运行;但是,如果我犯了一个错误并尝试调用Undo()方法,那么什么都不会发生。守则将留在那里。我认为这是因为文本既没有输入也没有粘贴到RichTextBox中。

我想要实现的目标:我需要一个代码片段,允许我将预定义的HTML代码粘贴或添加到光标所在的RichTextBox中(如上所述),并且也可以撤消它。

此外,如果有必要知道,该项目使用RichTextBox控件,用户可以在其中键入他/她自己的HTML文档,而快捷方式可以单击按钮向文档添加标题,按钮,链接等。

2 个答案:

答案 0 :(得分:1)

替换文本会重置撤消/重做堆栈,因此最好尽量避免这种情况。

简单的解决方法:

Dim insertText As String = "<h1>Example Header</h1>"
RichTextBox1.SelectedText = insertText

答案 1 :(得分:1)

使用RichTextBox.Selected*属性设置文本或更改可以撤消的颜色等。

Private Sub InsertTextInRTB(ByVal text As String, ByVal insertPos As Integer)
    RichTextBox1.SelectionStart = insertPos
    RichTextBox1.SelectionLength = 0
    RichTextBox1.SelectedText = text
End Sub

Private Sub InsertTextInRTB(ByVal text As String)
    RichTextBox1.SelectionLength = 0
    RichTextBox1.SelectedText = text
End Sub

用法:

    Dim insertText = "<h1>Example Header</h1>"
    InsertTextInRTB(insertText)              '<-- to insert at current cursor position
    InsertTextInRTB(insertText, 100)         '<-- to insert at some other position