2012-04-24 60 views
3

WinForms應用程序,我維護崩潰的用戶機器的一小部分(可能約4)。應用程序每次都會爲這些用戶崩潰,並且在第一個對話框顯示之前崩潰。Arial Black Italic字體導致WinForms應用程序崩潰

異常

Source: 
System.Drawing 

Message: 
Font 'Arial Black' does not support style 'Bold'. 

Stack Trace: 
at System.Drawing.Font.CreateNativeFont() 
at System.Drawing.Font.Initialize(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont) 
at System.Drawing.Font.Initialize(String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont) 
at System.Drawing.Font..ctor(String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet) 

一個應用程序所使用的字體是宋體黑色:

this.label3.Font = new System.Drawing.Font("Arial Black", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 

第一次遇到這種事故發生時,我注意到一個字體,這是在用戶的計算機上,但不是我的。它被稱爲「宋體黑斜體」,它是1997年日這是文件名:

ARBLI ___ TTF

enter image description here

用戶有Windows XP中。

我刪除了字體,之後應用程序運行良好。正如我所提到的,在過去的22個月中,這場崩潰發生在約3個其他用戶身上。每次從用戶計算機上刪除「Arial Black Italic」字體似乎都能解決問題。

最近一段時間,用戶使用Windows 7,字體日期更新,但上述協議仍然解決了這個問題。

在這一點上,我想弄清楚這個崩潰錯誤的根本原因以及如何防止它。

回答

0

嘗試類似這樣的事情。

using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      // Create regular font first. 
      // Depending on the user's system, this font may already be bold. 
      // 

      var theFont = new System.Drawing.Font(
       "Arial Black", 
       8.25F, 
       System.Drawing.FontStyle.Regular, 
       System.Drawing.GraphicsUnit.Point, 
       ((byte)(0)) 
       ); 

      // If font is not bold, then try to create it. 
      // 

      if ((null != theFont) && !theFont.Bold) 
      { 
       if (theFont.FontFamily.IsStyleAvailable(FontStyle.Bold)) 
       { 
        theFont = new Font(theFont, FontStyle.Bold); 
       } 
      } 

      // Now use the font. 
      // 

      this.label3.Font = theFont; 
     } 
    } 
}