Arial Black Italic字体导致WinForms应用程序崩溃

时间:2012-04-24 18:20:29

标签: winforms fonts

我在一小部分用户计算机上维护崩溃的WinForms应用程序(可能大约4个)。应用程序每次都会为这些用户崩溃,并在第一个对话框显示之前崩溃。

异常

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)

该应用程序使用的一种字体是Arial Black:

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

第一次发生这次崩溃时,我注意到用户计算机上的字体,但不是我的。它被称为“Arial Black Italic”,它的日期是1997年。这是文件名:

  

ARBLI ___。TTF

enter image description here

用户使用的是Windows XP。

我删除了字体,之后应用程序运行正常。正如我所提到的,在过去的22个月中,这次崩溃发生在其他3个用户身上。每次从用户的计算机上删除“Arial Black Italic”字体似乎都可以解决问题。

最近一次,用户使用的是Windows 7,字体的日期更新,但上述协议仍然解决了问题。

此时,我正在尝试找出此崩溃错误的根本原因以及如何防止它。

1 个答案:

答案 0 :(得分: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;
        }
    }
}