免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
[C#]設置RichTextBox的字體格式:粗體、斜體、下劃線 【轉(zhuǎn)】

轉(zhuǎn)自:http://www.cnblogs.com/jingmoxukong/articles/2118114.html

做一個文本編輯控件,設置字體的格式等功能必不可少。 RichTextBox作為.Net提供的富文本控件,成為很多人做文本編輯器的首選。本文將要討論就是針對RichTextBox控件的設置粗體、斜 體、下劃線等功能的相關(guān)問題。

      首先我們看一段設置體的代碼。


//設置粗體 
 private void toolStripButton4_Click(object sender, EventArgs e) 
 
     Font oldFont, newFont; 
     oldFont = curRichTextBox.SelectionFont; 
     if (oldFont.Bold) 
     
         newFont = new Font(oldFont, oldFont.Style ^ FontStyle.Bold); 
     
     else 
     
         newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold); 
     
     curRichTextBox.SelectionFont = newFont; 
     curRichTextBox.Focus(); 
 

乍一看上面的代碼沒什么問題,首先獲取被選中文本的Font對象,然后判斷是否為粗體,如果是,就將粗體取消;如果不是,則將被選中文本設為粗體。寫幾個字母并選中,點擊  按鈕,文字加粗;再點擊,文字去粗。好像真的沒什么問題。那如果我選中的字體中既有漢字又有英文,或者字體的FontName不同時,會有問題嗎?試一下,結(jié)果出異常了。

為什么呢?因為我們選中的文本格式不同一,它們的Font不一樣,當它們被選中時,我們獲得的SelectionFont就是null了,因此這里會出現(xiàn) 空指針異常。該怎么辦呢?我們可以在使用前先判斷一下oldFont是否為空。如果為空,我們再做單獨處理。

      在被選中文本的SelectionFont為空的情況下,我們該怎樣設置被選中文本的格式是一個很重要的問題。雖然整體的SelectionFont為 空,但是,如果我們化整為零,只選中一個文字,那么它的Font肯定不為空,而設置它的FontStyle也 就很簡單了。因此,我們得出這樣的策略。

      1. 如果只選中一個文字或者光標沒有選中文字而只是處于文本框的某一坐標點,這時SelectionFont不為空,可直接加粗或去粗。

      2. 如果選中了多個文字并且SelectionFont為空,可以做如下處理,首先獲取被選中文本的ProtoType,即保留被選文字的副本,對其副本進行 操作而不影響它的原型。逐一選中副本中的文字,并一一設置它們的FontStyle。

      3. 如果選中了多個文字但是它的SelectionFont不為空,即它們的字體種類相同,能不能直接像第一種情況那樣加粗去粗呢?不能,因為它們的 FontSize和FontStyle可能不相同。這時我們也需要一一處理,因此,情況3類似于情況2的處理方法。

      以上是針對Bold的討論,同樣也適用于Italic和Underline,因此,我們可以寫一個統(tǒng)一的設置FontStyle的方法,方法如下所示。

///<summary> 
///設置字體格式:粗體、斜體、下劃線 
///</summary> 
/// <param name="style">事件觸發(fā)后傳參:字體格式類型</param> 
 private void ChangeFontStyle(FontStyle style)  
    if (style != FontStyle.Bold && style != FontStyle.Italic &&  
        style != FontStyle.Underline) 
        throw new System.InvalidProgramException("字體格式錯誤"); 
    RichTextBox tempRichTextBox = new RichTextBox();  //將要存放被選中文本的副本 
    int curRtbStart = curRichTextBox.SelectionStart;   
    int len = curRichTextBox.SelectionLength; 
    int tempRtbStart = 0; 
    Font font = curRichTextBox.SelectionFont; 
    if (len <= 1 && font != null) //與上邊的那段代碼類似,功能相同 
    
        if (style == FontStyle.Bold && font.Bold ||  
            style == FontStyle.Italic && font.Italic ||  
            style == FontStyle.Underline && font.Underline) 
        
            curRichTextBox.SelectionFont = new Font(font, font.Style ^ style); 
        
        else if (style == FontStyle.Bold && !font.Bold ||  
                 style == FontStyle.Italic && !font.Italic ||  
                 style == FontStyle.Underline && !font.Underline) 
        
            curRichTextBox.SelectionFont = new Font(font, font.Style | style); 
        
        return
    
    tempRichTextBox.Rtf = curRichTextBox.SelectedRtf; 
    tempRichTextBox.Select(len - 1, 1); //選中副本中的最后一個文字 
      //克隆被選中的文字Font,這個tempFont主要是用來判斷 
      //最終被選中的文字是否要加粗、去粗、斜體、去斜、下劃線、去下劃線 
    Font tempFont = (Font)tempRichTextBox.SelectionFont.Clone();              
      
    //清空2和3 
    for (int i = 0; i < len; i++) 
    
        tempRichTextBox.Select(tempRtbStart + i, 1);  //每次選中一個,逐個進行加粗或去粗 
        if (style == FontStyle.Bold && tempFont.Bold ||  
            style == FontStyle.Italic && tempFont.Italic ||  
            style == FontStyle.Underline && tempFont.Underline) 
        
            tempRichTextBox.SelectionFont =  
                new Font(tempRichTextBox.SelectionFont,  
                         tempRichTextBox.SelectionFont.Style ^ style); 
        
        else if (style == FontStyle.Bold && !tempFont.Bold ||  
                 style == FontStyle.Italic && !tempFont.Italic ||  
                 style == FontStyle.Underline && !tempFont.Underline) 
        
            tempRichTextBox.SelectionFont =  
                new Font(tempRichTextBox.SelectionFont,  
                         tempRichTextBox.SelectionFont.Style | style); 
        
    
    tempRichTextBox.Select(tempRtbStart, len); 
    curRichTextBox.SelectedRtf = tempRichTextBox.SelectedRtf; //將設置格式后的副本拷貝給原型 
    curRichTextBox.Select(curRtbStart, len);  

這樣就避免了設置字體格式時的上述問題。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
RichTextBox控件 可讀取rtf
V8.9 CheckBox 控件
VBA--單元格的格式設置(一)
VBA編程常用過程代碼之單元格設置
應用外邊距屬性制作的文字
《張寶旬大夫傳世秘方整理版》
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服