2013-02-21 116 views
0

我在Visual Studio 2010 C#Winform中有奇怪的Unicode字符顯示行爲。我正在使用Windows 7 x64。出於某種原因,我可以在代碼中做這樣的事情,並在按下按鈕時讓角色正確顯示。該字體是默認的Microsoft Sans Serif。C#中的Winform停止顯示Unicode Unicode字符

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

然而,當我關閉了該項目,並重新打開它的按鈕現在只顯示2個格爲字符是否丟失。我不明白什麼可以改變,爲什麼它第一次工作。

一些帖子建議使用MS哥特式控件,但由於某些原因,我甚至無法在屬性窗口中選擇它。字體在我的系統中,因爲我在控制面板 - >字體中進行了檢查。 MS哥特式在那裏。

是否有一些設置可以改變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(); 
} 
+0

MS哥特式適用於日語,不適用於中文,因此無論使用何種字體(哪一個取決於您使用的是傳統還是簡體中文),都需要使用不同的字體。 – 2013-02-21 17:32:46

回答

1

當你使用簡體中國文字和日本不,正確的字體是宋體或鬆女士。

微軟有時會自動爲您切換字體,例如,當您將初始化文本複製粘貼到Word中時,您會看到英文部分用Arial或類似語言編寫,中文文本自動切換爲SimSun或無論是計算機上的默認中文字體。我想這就是文本剛開始顯示時發生的情況。然後,在保存項目時,有一個按鈕標題不能使用兩種不同的字體,因此它將按鈕字體保存爲Microsoft Sans Serif,並因此爲您提供方框。解決方案是使用SimSun或Ms Song作爲按鈕,因爲這些字體可以同時顯示英文和中文字符。如果您想要同一個按鈕也顯示德語或韓語等,您將遇到問題。如果是這種情況,您需要根據本地化語言動態設置按鈕字體。

+1

您對此絕對正確。這似乎是Visual Studio IDE讓我這麼做的奇怪行爲,因爲簡體中文字符甚至不是默認Arial字體或Sans Serif的一部分。我發現另一個奇怪的怪癖是,如果你使用「...」按鈕瀏覽字體,你將找不到像SimuSun或SimHei這樣的字體。但是,如果使用箭頭展開「字體」字段,則可以通過選擇「名稱」字段來選擇這些字體。這麼奇怪。 – Patratacus 2013-02-24 03:22:44