Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的Winform停止显示unicode汉字_C#_Winforms_Unicode_Fonts - Fatal编程技术网

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

C#中的Winform停止显示unicode汉字,c#,winforms,unicode,fonts,C#,Winforms,Unicode,Fonts,我在VisualStudio2010C#Winform中有一个奇怪的Unicode字符显示行为。我使用的是Windows7x64。出于某种原因,我能够在代码中执行类似的操作,并在按下按钮时正确显示字符。字体是默认的Microsoft无衬线字体 private void button1_Click(object sender, EventArgs e) { button1.Text = "Initialize System 初始化系统"; } 但是,在我关闭项目并重新打开它之

我在VisualStudio2010C#Winform中有一个奇怪的Unicode字符显示行为。我使用的是Windows7x64。出于某种原因,我能够在代码中执行类似的操作,并在按下按钮时正确显示字符。字体是默认的Microsoft无衬线字体

  private void button1_Click(object sender, EventArgs e)
  {
    button1.Text = "Initialize System 初始化系统";
  }
但是,在我关闭项目并重新打开它之后,按钮现在只显示2个正方形,就好像缺少字符一样。我不明白什么会改变,为什么它第一次起作用

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

是否有一些设置可以更改winform中的字体设置以允许MS哥特式字体

我现在唯一能让它工作的方法是重写按钮的paint事件,然后在那里进行渲染。但在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();
}

因为您使用的是简体中文而不是日语,所以正确的字体是SimSun或Ms Song


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

MS哥特式是日语,而不是中文,因此无论您使用的是繁体还是简体中文,您都需要不同的字体。这一点您完全正确。Visual Studio IDE让我这样做似乎是一种奇怪的行为,因为简体中文甚至不是默认的Arial字体或无衬线字体的一部分。我发现的另一个奇怪的怪癖是,如果你使用“…”按钮浏览字体,你将找不到像Simuson或SimHei这样的字体。但是,如果使用箭头展开字体字段,则可以通过选择“名称”字段来选择这些字体。真奇怪。