C#中的Winform停止显示unicode中文字符

时间:2013-02-21 16:30:48

标签: c# winforms unicode fonts

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

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

然而,在我关闭项目并重新打开它之后,按钮现在只显示2个方块,就像字符丢失一样。我不明白什么可以改变,为什么它第一次有效。

有些帖子建议使用MS Gothic进行控制,但由于某些原因,我甚至无法在属性窗口中选择它。自从我在控制面板中检查后,该字体在我的系统中 - >字体。 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();
}

1 个答案:

答案 0 :(得分:1)

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

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