日期:2014-05-17  浏览次数:20881 次

为啥捕捉不到System.NullReferenceException异常
  
 private void buttonBold_Click(object sender, EventArgs e)
        {
            Font oldFont, newFont;
            oldFont = this.RichTextBox.SelectionFont;//获取旧字体
            try
            {
                if (oldFont.Bold)
                { newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold); }
                else
                {
                    newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);
                }
                this.RichTextBox.SelectionFont = newFont;
                this.RichTextBox.Focus();
            }
            catch (System.NullReferenceException E)
            {
                MessageBox.Show(E.Message);
            }
            catch 
            {
                MessageBox.Show("......");
            }
        }
   
   

纯中文是好好,纯英文也好好的,中英文一选中一起的时候就出问题了,看了半天还在纠结中。有没有大侠说说啊!!么么哒。。。。。。
异常 字体

------解决方案--------------------
你的中文字体和英文字体有可能不同,因此共同选中之后可能系统不知道该用哪个字体,干脆不选,即是空。你可以测试一下。
你把这句if (oldFont.Bold)
更改为 if (oldFont!=null && oldFont.Bold) 试试
------解决方案--------------------
原因很简单,你输入的英文默认是Arial字体,而汉字是宋体
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.richtextbox.selectionfont.aspx

如果当前选定文本具有多种指定字体,则此属性为 null。