Есть ли какой-то элемент управления отображением в .NET, который может обрабатывать цветовые коды? - PullRequest
0 голосов
/ 12 июня 2011

Похоже, что единственные опции, доступные для многоцветного изображения в строке, - это либо группа элементов управления метками, умело сгруппированных вместе, либо использование RichTextBox и воспроизведение со свойствами шрифта, когда текст добавляется в элемент управления.1002 * Вместо этого я ищу какой-то элемент управления, который может визуализировать некоторый стиль управляющих кодов в виде цвета.Рассмотрим коды 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}"

. Выше слова «зеленый» и «синий» будут окрашены в соответствующие цвета.Мне было интересно, если бы был элемент управления с какой-то подобной функцией, или мне придется самому что-то кодировать?

Обратите внимание, у меня есть только экспресс-копия VB 2010, и я очень хотел быизбегать сторонних контролей.

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Вы специально ищете что-то, что понимает управляющие коды ANSI, или просто что-то, что принимает разметку?Если вы просто хотите что-то, что принимает разметку, вы можете использовать свойство RichTextBox.Rtf, чтобы установить все управляющие коды и текст в одну строку.

См. http://msdn.microsoft.com/en-us/library/aa140277(v=office.10).aspx для спецификаций RTF.

Я бы рекомендовал программно сгенерировать образец документа, затем прочитать свойство Rtf и использовать полученный RTF-код в качестве шаблона для того, что вы должны сгенерировать.Для справки, вот простой RTF-документ, который имеет два цвета текста (плюс стандартное значение) в Consolas (откат к Courier New):

{\rtf1\deff0{\fonttbl{\f0\fmodern\fcharset0 Consolas {\*\falt Courier New};}}
{\colortbl ;\red255\green0\blue0;\red0\green176\blue80;}
\cf1 Hello\cf0 , \cf2 world\cf0 .
}
0 голосов
/ 12 июня 2011

Есть несколько других вариантов. сначала вы можете рисовать текст, используя графический объект и метод DrawString , используя любой цветовой шрифт и стиль. Это, однако, может быть болью. Самый простой способ - использовать элемент управления веб-браузера и использовать старый добрый 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, G, B)


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


    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...