如何在RichTextBox中显示★符号

时间:2018-11-28 11:43:38

标签: c# winforms richtextbox rtf

当我尝试此html内容包含text(★)时,我尝试从html创建RTF文本。我的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 :(得分:3)

解析器将在字符串开头并按扼制符看到“ 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
}

严重的是,这可能是字体和字符集的问题。

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分:0)

您要定位哪个.Net框架版本?我猜是在4.7之前。

您看到的是RichTextBox的限制基于.NET 4.7之前的版本的RICHEDIT20W。在4.7.x版本中,默认设置切换为RICHEDIT50W。

最简单的解决方案是仅切换到4.7.x框架版本,只要这是一个选择即可。如果出于某种原因必须使用较旧的框架,则可以按照this example(以下为后代而复制的代码)之类的方法切换到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将为您带来比您想了解的RTF编辑器内部功能更多的东西。