- 25
- 1月
在实践《C#入门经典》中Windows编程部分,使用代码控制RichTextBox中SelectionFont属性时有这样的代码:
Font oldFont, newFont;
// Get the font that is being used in the selected text
oldFont = this.richTextBoxText.SelectionFont;
// If the font is using bold style now, we should remove the formatting
if (oldFont.Italic)
{
newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic);
}
else
{
newFont = new Font(oldFont, oldFont.Style | FontStyle.Italic);
}
this.richTextBoxText.SelectionFont = newFont;
this.richTextBoxText.Focus();
用来修改选中文本的字体属性,但实际调试时发现,在某些时候选中文本(尤其是对于一些被复制进来的文本)的SelectionFont;会为null,这样传入newFont构造函数中的oldFont也为null,造成调试失败。而书上并没有提及此事。
目前我采取的方法是将oldFont赋值那句改为:
// Get the font that is being used in the selected text
oldFont = this.richTextBoxText.SelectionFont == null ? this.richTextBoxText.Font : this.richTextBoxText.SelectionFont;
在SelectionFont为空时直接采用RichTextBox的Font属性,目前看来还算解决了问题。
难道作者没有发现这个问题???
2008年02月04日 星期一 2:43 上午
没错没错··全选的时候就发生了~~~
2010年09月03日 星期五 12:14 上午
LZ這樣還是有問題的。雖然避開了NULL值,但是混合選擇時 this.richTextBoxText.Font.Bold 這個屬性永遠是FALSE
就是說變成粗體后無法變回來了。。。
2010年09月03日 星期五 3:40 下午
感谢回复指出问题。这是我07年初学C#时写的东西了。最近在做的一直是B/S模式开发,很长时间没做过GUI了。