我目前正在制作一个“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文档,而快捷方式可以单击按钮向文档添加标题,按钮,链接等。
答案 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