Windows 窗体和控件中的国际字体
在国际化应用程序中,选择字体的推荐方法是尽可能使用字体后备。 字体后备意味着系统确定字符属于哪一脚本。
使用字体后备
若要利用此功能,则不要为窗体或其他任何元素设置 Font 属性。 应用程序将自动使用默认系统字体,而操作系统的本地化语言不同,则默认系统字体也将不同。 当应用程序运行时,系统将自动为操作系统中选择的区域性提供正确的字体。
对于此不设置字体规则有一点例外,即对于更改字体样式的情况。 对于某一应用程序,如果用户要在其中单击一个按钮以使文本框中的文本以粗体显示,这一点可能十分重要。 若要执行此操作,应该基于该窗体的任何字体,编写一个函数来将文本框的字体样式更改为粗体。 必须在两个地方调用此函数:在按钮的 Click 事件处理程序中,以及在 FontChanged 事件处理程序中。 如果只在 Click 事件处理程序中调用该函数,并且代码的某些其他部分更改了整个窗体的字体系列,则该文本框将不随窗体的其余部分的更改而更改。
' Visual Basic
Private Sub MakeBold()
' Change the TextBox to a bold version of the form font
TextBox1.Font = New Font(Me.Font, FontStyle.Bold)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Clicking this button makes the TextBox bold
MakeBold()
End Sub
Private Sub Form1_FontChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.FontChanged
' If the TextBox is already bold and the form's font changes,
' change the TextBox to a bold version of the new form font
If (TextBox1.Font.Style = FontStyle.Bold) Then
MakeBold()
End If
End Sub
// C#
private void button1_Click(object sender, System.EventArgs e)
{
// Clicking this button makes the TextBox bold
MakeBold();
}
private void MakeBold()
{
// Change the TextBox to a bold version of the form's font
textBox1.Font = new Font(this.Font, FontStyle.Bold);
}
private void Form1_FontChanged(object sender, System.EventArgs e)
{
// If the TextBox is already bold and the form's font changes,
// change the TextBox to a bold version of the new form font
if (textBox1.Font.Style == FontStyle.Bold)
{
MakeBold();
}
}
但是,在本地化应用程序时,对于某些语言粗体可能不能正确显示。 如果此问题较为重要,您想让本地化人员来选择将字体从粗体切换为常规文本。 因为本地化人员通常不是开发人员并且没有对源代码的访问权限,而只能访问资源文件,所以需要在资源文件中设置该选项。 为此,需要将 Bold 属性设置为 true。 这导致字体设置被写出到资源文件,而本地化人员可以在资源文件中对其进行编辑。 然后可以基于该窗体的任何字体(但使用在资源文件中指定的字体样式),在 InitializeComponent 方法之后编写代码来重置该字体。
' Visual Basic
TextBox1.Font = New System.Drawing.Font(Me.Font, TextBox1.Font.Style)
// C#
textBox1.Font = new System.Drawing.Font(this.Font, textBox1.Font.Style);