C#中的Winform停止显示unicode汉字
我在VisualStudio2010C#Winform中有一个奇怪的Unicode字符显示行为。我使用的是Windows7x64。出于某种原因,我能够在代码中执行类似的操作,并在按下按钮时正确显示字符。字体是默认的Microsoft无衬线字体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 初始化系统"; } 但是,在我关闭项目并重新打开它之
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这样的字体。但是,如果使用箭头展开字体字段,则可以通过选择“名称”字段来选择这些字体。真奇怪。