.NET中是否有某种可以处理颜色代码的显示控件?

问题描述

| 似乎可以对字符串进行多色处理的唯一选项是将一堆标签控件巧妙地组合在一起,或者使用RichTextBox并在将文本添加到控件时使用字体属性。 我正在寻找的是一种可以将某种样式的控制代码呈现为颜色的控件。考虑bash代码:
NORMAL=\'\\e[0m\'
GREEN=\'\\e[0;32m\'
BLUE=\'\\e[0;34m\'

echo -e \"This text is ${GREEN}green${NORMAL} and this text is ${BLUE}blue${NORMAL}\"
在上面,单词''green \'和\'blue \'将使用各自的颜色进行着色。我想知道是否存在具有此类功能的控件,还是我必须自己编写一些代码? 请注意,我只有VB 2010的Express副本,并且我非常想避免使用第三方控件。     

解决方法

        您是在专门寻找可以理解ANSI控制代码的东西,还是仅接受标记的东西?如果只需要接受标记的内容,则可以使用
RichTextBox.Rtf
属性以单个字符串设置所有控制代码和文本。 有关RTF规范,请参见http://msdn.microsoft.com/zh-cn/library/aa140277(v=office.10).aspx。 我建议您以编程方式生成一个示例文档,然后阅读
Rtf
属性,并使用生成的RTF代码作为应生成内容的模板。作为参考,这是一个简单的RTF文档,在Consolas中具有两种颜色的文本(加上默认值)(回退到Courier New): {\\ rtf1 \\ deff0 {\\ fonttbl {\\ f0 \\ fmodern \\ fcharset0 Consolas {\\ * \\ falt Courier New};}} {\\ colortbl; \\ red255 \\ green0 \\ blue0; \\ red0 \\ green176 \\ blue80;} \\ cf1你好\\ cf0,\\ cf2世界\\ cf0。 }     ,        还有其他两种选择。首先,您可以使用图形对象和DrawString方法使用所需的任何颜色字体和样式来绘制文本。但是,这可能会很痛苦。最简单的方法是使用Web浏览器控件并使用普通的旧html。 如果您不想使用RTF,我写了这个小示例,它将允许您使用RGB代码,这不是完整的解决方案,因为您必须找出一种分配控件字符的方法。如果要测试它,请创建一个表单,并在其上放置一个按钮和一个富文本框。
Imports System.Drawing
Imports System.Text.RegularExpressions
Public Class Form1

    Private Sub Button1_Click(sender As System.Object,e As System.EventArgs) Handles Button1.Click
        Dim str As String = \"This text is {#00FF00}green{#000000} and this text is {#0000FF}blue{#000000}\"
        PrintToRtf(str,RichTextBox1)

    End Sub

    Private Shared Sub PrintToRtf(Str As String,RTB As RichTextBox)

        Dim mc As MatchCollection = Regex.Matches(Str,\"\\{\\#(?<Red>[0-9A-Fa-f]{2})(?<Green>[0-9A-Fa-f]{2})(?<Blue>[0-9A-Fa-f]{2})\\}\")


        Dim lp As Int32 = 0

        For Each mtc As Match In mc
            Dim subStr As String = Str.Substring(lp,mtc.Index - lp)

            Dim R,G,B As Byte
            R = Integer.Parse(mtc.Groups(\"Red\").Value,Globalization.NumberStyles.AllowHexSpecifier)
            G = Integer.Parse(mtc.Groups(\"Green\").Value,Globalization.NumberStyles.AllowHexSpecifier)
            B = Integer.Parse(mtc.Groups(\"Blue\").Value,Globalization.NumberStyles.AllowHexSpecifier)

            Dim clr As Color = Color.FromArgb(255,R,B)


            RTB.SelectedText = subStr
            RTB.SelectionColor = clr
            lp = mtc.Index + mtc.Length
            RTB.Select(RTB.TextLength,0)
        Next


    End Sub

End Class
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...