RichTextBox无法显示Unicode数学字母数字符号 [英] RichTextBox cannot display Unicode Mathematical alphanumeric symbols

查看:39
本文介绍了RichTextBox无法显示Unicode数学字母数字符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法让WinFormsRichTextBox显示某些Unicode字符,特别是Mathematical alphanumeric symbols(但问题很可能不限于这些字符)。

令人惊讶的是,相同的字符可以使用相同的(默认)字体以纯字体或多行TextBox显示。即使我将字体更改为例如"Arial"或"Lucida",我也会得到相同的结果。

该屏幕截图来自Windows 10,但我在Windows 7上也得到了相同的结果。该示例显示了ascii小写a-d,后跟数学斜体sans-serif小写字母增量

我使用的是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 𝛼𝛽𝛾𝛿";
    // ...
}

请注意,存储字符似乎不是问题。字符正确存储在RichTextBox中。如果将文本复制出来并粘贴到某个位置(如TextBox),则所有字符都会正确显示。

另一方面,如果将字符粘贴到RichTextBox,也会出现同样的错误显示。

因此,它看起来只是显示问题。

推荐答案

这是RichTextBox中设计的错误/决定,已在.NET 4.7中修复。

RichTextBox实际上是RichEdit的包装器。在.NET 4.7中,该控件使用RICHEDIT50W,而在以前的版本中,它使用RichEdit20W

要解决此问题,您可以使用以下任一选项:

  • 升级到.NET 4.7

  • 您可以使用RichTextBox的最新版本,即RICHEDIT50W,为此,您应该继承标准RichTextBox,重写CreateParams,加载库Msftedit.dll,并将ClassName设置为RICHEDIT50W

若要查看实现,请查看this post

这篇关于RichTextBox无法显示Unicode数学字母数字符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆