Mar*_*ryl 7 .net c# unicode richtextbox winforms
我无法让WinForms RichTextBox显示一些Unicode字符,特别是数学字母数字符号(但问题很可能不仅限于那些).
令人惊讶的是,相同的字符可以TextBox使用相同(默认)字体以普通或多行显示.即使我将字体更改为例如"Arial"或"Lucida",我也会得到相同的结果.
屏幕截图来自Windows 10,但我在Windows 7上得到了相同的结果.该示例显示了ascii小广告,后跟数学斜体sans-serif小alpha-delta.
我正在使用Visual Studio 2017和.NET 4.6.1.
一个简单的测试代码:
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
// ...
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(25, 38);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(182, 108);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "abcd ";
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(213, 38);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(179, 108);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "abcd ";
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,存储字符似乎不是问题.字符正确存储在RichTextBox.如果您将文本复制并粘贴到某处(比如TextBox),则所有字符都会正确显示.
另一方面,如果将字符粘贴到RichTextBox,则会得到相同的错误显示.
所以它看起来只是一个显示问题.
Rez*_*aei 10
这是设计中的错误/决定,RichTextBox其中已在.NET 4.7中修复.
RichTextBox实际上是一个包装器RichEdit.在.NET 4.7中,控件正在使用RICHEDIT50W它之前使用的版本RichEdit20W.
要解决此问题,您可以使用以下任一选项:
要么
RichTextBox是RICHEDIT50W,这样做,你应该从标准的继承RichTextBox和超越CreateParams,并加载库Msftedit.dll,并设置ClassName到RICHEDIT50W.要查看实现,请查看此帖子.