Как отобразить символы ★ в RichTextBox - PullRequest
0 голосов
/ 28 ноября 2018

Я пытался создать текст RTF из html, при этом мой html-контент содержит текст (★).В моем тексте RTF упоминается ниже,

string rtf = @"{\rtf1{\fonttbl{\f0\froman Times New Roman;}{\f1\fnil Arial;}}{\colortbl;\red238\green122\blue3;}{{\pard {\f1 \sl240\slmult1 {\b\fs24\par \qc \cf1 {XhtmlCells}\par}{\b\fs20\par \qc \cf1 {★★★✩✩}\par}{{XhtmlCells use the }{\b { RichTextBoxSupportsXHTML}}{ control from GotDotNet user samples to display XHTML formatted text inside a cell.}\par}}}}}";

Я попытался загрузить этот текст в RichTextBox1.Rtf, который будет отображаться как "?"вместо "★".

Подскажите, пожалуйста, как отобразить этот символ звезды в RichTextBox.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Парсер увидит шрифт «Times New Roman» в начале вашей строки и захлебнется.

Попробуйте это:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset1 Segoe UI Symbol;}{\f1\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.17134}\viewkind4\uc1 
\pard\sa200\sl276\slmult1\f0\fs22\lang7\u9733?\f1\par
}

Серьезно, это, вероятно, вопросшрифт и набор символов.

0 голосов
/ 28 ноября 2018

На какую версию .Net framework вы ориентируетесь?Я предполагаю что-то до 4.7.

То, что вы видите, это ограничение RichTextBox, основанного на RICHEDIT20W с версиями до .Net 4.7.В выпусках 4.7.x значение по умолчанию переключено на RICHEDIT50W.

Самое простое решение - просто переключиться на версию 4.7.x Framework, если это возможно.Если вам по какой-то причине нужно использовать более старую платформу, вы можете воспользоваться чем-то вроде в этом примере (код, скопированный ниже для потомков), чтобы переключиться в редактор RICHEDIT50W.Он существует со времен XP, поэтому он должен быть доступен почти везде.

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);

protected override CreateParams CreateParams
{
    get
    {
       CreateParams cparams = base.CreateParams; 
       if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
       {
          cparams.ClassName = "RICHEDIT50W";
       }
       return cparams;
     }
}

Я не использовал вышеупомянутый метод, но то, что вы испытываете, является распространенной проблемой.Поиск RichTextEdit, RICHEDIT20W и / или RICHEDIT50W даст вам гораздо больше, чем вы когда-либо хотели узнать о внутренностях редактора форматированного текста.

0 голосов
/ 28 ноября 2018

попробуй:

richTextBox1.Font = new Font("Arial", 14);  
richTextBox1.Text = "Special character: \u20ac";
...