重复使用加载文件()和保存文件()时,RichTextBox显示错误的颜色

时间:2013-05-23 15:34:03

标签: winforms file-io visual-studio-2005 richtextbox richtext

我在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

不应该所有这些线都是红色的吗?为什么有些黑?

3 个答案:

答案 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设置为红色。然后做追加。

结果将是正确的......听起来是倒退的。

我不知道为什么这样做......或者为什么它是必要的......但是你永远不会让它以任何其他方式工作。 (我尝试了无数其他“正确”的方法。但它们从不起作用。)

感谢微软!