我在Windows XP机器上使用VS2005和VB.net来创建WinForms可执行文件。
似乎我可以成功地将文本加载到RichTextBox,设置颜色,写一行并保存。
但是后来在我的代码中,当我重复那些相同的动作时......红色变成了黑色。
我在这里做错了什么:
For i As Int16 = 1 To 2
rtb.LoadFile("test.txt")
rtb.SelectionColor = Color.Red : rtbCommands.AppendText("line " & vbCrLf)
rtb.SaveFile("test.txt")
Next i
不应该所有这些线都是红色的吗?为什么有些黑?
答案 0 :(得分:1)
对不起,这是几个月后,但这是我的答案: 不幸的是,我认为你做错了什么。我认为这是微软在RichTextBox控件的界面中做错了。我发现它只是笨重,笨拙,反直觉。您的代码中发生了什么,SelectionColor属性设置当前所选文本的颜色。为什么它将第一个单词着色而不是第二个单词对我来说是一个谜,因为我没有试图完全理解微软的怪异。但我知道知道您需要使用哪些代码:
rtb.SaveFile("test.txt")
For i As Int32 = 1 To 2
rtb.LoadFile("test.txt")
Dim oldBeg% = rtb.SelectionStart ' save original selection
Dim oldLen% = rtb.SelectionLength ' save original selection
Dim newBeg% = rtb.TextLength
rtb.AppendText("line " & vbCrLf)
Dim newLen% = rtb.TextLength - newBeg
' now color the newly added text ...
rtb.Select(newBeg, newLen) : rtb.SelectionColor = Color.Red
' now select the text that was (or was not) selected before text was appended
rtb.Select(oldBeg, oldLen)
rtb.SaveFile("test.txt")
Next i
一个小注释:我使用Int32而不是你使用的Int16,因为不幸的是,Int16在.NET中不更快,但实际上更慢。并不是像这个简单的循环这样的超高速真的需要任何速度提升,但.NET中的Int32和UInt32是在这样的循环中使用时不会在内部转换为更大的Int的最小的Int。
答案 1 :(得分:0)
或许你必须这样做......
rtb.LoadFile("test.txt")
rtb.Select(rtb.TextLength)
rtb.SelectionColor = Color.Red : rtbCommands.AppendText("line " & vbCrLf)
rtb.SaveFile("test.txt")
答案 2 :(得分:0)
我知道这绝对没有意义......但你必须选择框中已有的所有现有文字。 (您不想将颜色设置为红色的文本。)然后将其SelectionColor设置为红色。然后做追加。
结果将是正确的......听起来是倒退的。
我不知道为什么这样做......或者为什么它是必要的......但是你永远不会让它以任何其他方式工作。 (我尝试了无数其他“正确”的方法。但它们从不起作用。)
感谢微软!