C#中的Winform停止显示unicode汉字

本文关键字:显示 unicode 汉字 中的 Winform | 更新日期: 2023-09-27 18:00:29

我在Visual Studio 2010 C#Winform中有一个奇怪的Unicode字符显示行为。我使用的是Windows 7 x64。出于某种原因,我能够在代码中做这样的事情,并在按下按钮时使字符正确显示。字体是默认的Microsoft Sans Serif。

  private void button1_Click(object sender, EventArgs e)
  {
    button1.Text = "Initialize System 初始化系统";
  }

然而,在我关闭项目并重新打开它之后,按钮现在只显示2个方块,就好像字符不见了一样。我不明白会发生什么变化,为什么它第一次起作用。

有些帖子建议使用MS Gothic作为控件,但由于某些原因,我甚至无法在属性窗口中选择它。自从我签入控制面板->字体后,字体就在我的系统中了。哥德女士也在场。

是否有一些设置可以更改winform中的字体设置以允许MS Gothic字体?

我现在唯一能做到这一点的方法是覆盖按钮的绘制事件,然后在那里进行渲染。不过,这在像DataGrid这样的组件上更难做到。这是适用于带有中文字符的按钮的代码:

private void _Paint(object sender, PaintEventArgs e)
{
  Button btn = (Button)sender;
  SolidBrush drawBrush = new SolidBrush(btn.ForeColor);
  StringFormat sf = new StringFormat { Alignment = StringAlignment.Center,
                                       LineAlignment = StringAlignment.Center };
  string text = "Initialize System 初始化系统";
  btnIntialize.Text = string.Empty;
  e.Graphics.DrawString(text, btn.Font, drawBrush, e.ClipRectangle, sf);
  drawBrush.Dispose();
  sf.Dispose();
}

C#中的Winform停止显示unicode汉字

由于您使用的是简体中文而不是日语,因此正确的字体是SimSun或Ms Song。

Microsoft有时会自动为您切换字体,例如,当您将初始化文本复制粘贴到Word中时,您会看到英文部分是用Arial或类似字体书写的,而中文文本则自动切换为SimSun或计算机上默认的中文字体。我想这就是当文本一开始显示正确时发生的情况。然后,在保存项目时,它遇到了一个按钮标题不能用两种不同字体的问题,所以它将按钮字体保存为Microsoft Sans Serif,因此现在会给你方框。解决方案是使用SimSun或Ms Song作为按钮,因为这些字体可以同时显示英文和中文字符。如果你想让同一个按钮同时显示德语或韩语或类似内容,你会遇到问题。如果是这种情况,则需要根据本地化语言动态设置按钮字体。