1

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

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

4

3 回答 3

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。

于 2013-11-22T22:22:48.803 回答
0

或者也许你必须这样做......

rtb.LoadFile("test.txt")
rtb.Select(rtb.TextLength)
rtb.SelectionColor = Color.Red : rtbCommands.AppendText("line " & vbCrLf)
rtb.SaveFile("test.txt")
于 2013-05-23T16:49:33.980 回答
0

我知道这绝对没有意义......但是您必须选择框中已经存在的所有文本。(您不想将文本涂成红色。)然后将其 SelectionColor 设置为红色。然后进行追加。

结果将是正确的……就像听起来一样倒退。

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

感谢微软!

于 2013-05-23T20:00:30.390 回答