none
字型變更問題 RRS feed

  • 問題

  •  

    Button_Click.............(程序)

    Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont
            ' 宣告currentFont為系統文字格式,其值 = 目前RichTextBox1內的字型。
            RichTextBox1.SelectionFont = New Font("標楷體", currentFont.Size, currentFont.Style)
            ' 變更RichTextBox1內的字型 = New Font(現有基本字體群組, 現有字體大小,  現有樣式)

     

    1.上例程式可將選取中的字串變更為標楷體字型。

    2. 當選取的字串變更為標楷體之後,若要再次變更其它字串的字型時,如果所選取的字串範圍,包含了要變更的字串和已變更後的標楷體字元,就會產生未宣告執行個體的錯誤。

    3.變更前所有字型為系統預設字型。

    4.若是再次選取變更後的標楷體字串,然後再變更為標楷體,並不會產生錯誤,只有在同時選取非標楷體與標楷體字串時,才會產生錯誤。

     

    敬請釋惑,謝謝。

    請問,

    2007年5月22日 上午 03:05

解答

  • :::試試看

    RichTextBox1.SelectionFont = New Font("標楷體", RichTextBox1.Font.Size, RichTextBox1.Font.Style)

    2007年5月22日 下午 01:50
  • Hi,

    會發生"並未將物件參考設定為物件的執行個體"的原因可以看一下下面的說明(取自MSDN)

    節錄自MSDN

    如果目前文字選取範圍有一個以上的指定字型,這個屬性是 Null 參照 (即 Visual Basic 中的 Nothing)

    如果目前沒有選取文字,這個屬性中指定的字型會套用於目前插入點,以及在插入點後輸入控制項的所有文字。

    字型設定會套用直到屬性變更為其他字型,或者插入點移至控制項中的其他區段為止。

    如果在控制項內選取文字,選取的文字和任何在文字選取範圍之後所輸入的文字將會有套用至它的這個屬性值。

    您可以用這個屬性變更 RichTextBox 中的文字的字型樣式。您可以讓控制項中的文字變成粗體、斜體或者加底線。

    也可以變更文字的大小和套用於文字的字型。

     

    所以當SelectionFont是Nothing時又嘗試去存取他就會發生錯誤;避開錯誤的方式可以去判斷是不是nothing,例如

    Code Snippet

    If RichTextBox1.SelectionFont IsNot Nothing Then
           RichTextBox1.SelectionFont = New Font("標楷體", _
               RichTextBox1.SelectionFont.Size, RichTextBox1.SelectionFont.Style)
     End If

     

    這樣的方式也就是選取的文字中字型必須都是同一種才會有效;而您的需求目前還沒有看到要如何去保有原字型的大小,可能要再找找其它資料。

    2007年5月22日 下午 04:56
    版主

所有回覆

  • 因為沒有你程式全部的內容 與 相戶之間的關係 所以不懂你說的意思

    不過當你遇到  "未宣告執行個體"的錯誤

    麻煩 請你將宣告的層次 再提升一下  譬如你現在是在程序中宣告  可以試試看 再Form Class 宣告 Dim currentFont  這一段

    應該就OK了

    2007年5月22日 上午 09:56
  • :::試試看

    RichTextBox1.SelectionFont = New Font("標楷體", RichTextBox1.Font.Size, RichTextBox1.Font.Style)

    2007年5月22日 下午 01:50
  • 感謝您的說明:

    由於

    New Font("標楷體", RichTextBox1.Font.Size, RichTextBox1.Font.Style)中的RichTextBox1.Font.Size和RichTextBox1.Font.Style一定要先取得目前RichTextBox1內的字型大小和樣式,否則執行程式後,選取之字串會引用系統預設的字型大小和樣式,所以您的方法是可以的,但會改變字型大小與樣式。為了此狀況,所以我宣告下例執行個體,以便取得目前RichTextBox1內的字型大小和樣式,但就會發生前述的未宣告執行個體的錯誤。

    Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont

     

    請問,有其他方法取得目前RichTextBox1內的字型大小和樣式,而不要宣告上例執行個體,如此問題就排除了。

    謝謝。

    2007年5月22日 下午 03:14
  • Hi,

    會發生"並未將物件參考設定為物件的執行個體"的原因可以看一下下面的說明(取自MSDN)

    節錄自MSDN

    如果目前文字選取範圍有一個以上的指定字型,這個屬性是 Null 參照 (即 Visual Basic 中的 Nothing)

    如果目前沒有選取文字,這個屬性中指定的字型會套用於目前插入點,以及在插入點後輸入控制項的所有文字。

    字型設定會套用直到屬性變更為其他字型,或者插入點移至控制項中的其他區段為止。

    如果在控制項內選取文字,選取的文字和任何在文字選取範圍之後所輸入的文字將會有套用至它的這個屬性值。

    您可以用這個屬性變更 RichTextBox 中的文字的字型樣式。您可以讓控制項中的文字變成粗體、斜體或者加底線。

    也可以變更文字的大小和套用於文字的字型。

     

    所以當SelectionFont是Nothing時又嘗試去存取他就會發生錯誤;避開錯誤的方式可以去判斷是不是nothing,例如

    Code Snippet

    If RichTextBox1.SelectionFont IsNot Nothing Then
           RichTextBox1.SelectionFont = New Font("標楷體", _
               RichTextBox1.SelectionFont.Size, RichTextBox1.SelectionFont.Style)
     End If

     

    這樣的方式也就是選取的文字中字型必須都是同一種才會有效;而您的需求目前還沒有看到要如何去保有原字型的大小,可能要再找找其它資料。

    2007年5月22日 下午 04:56
    版主
  • Hi,

    在CodeProject找了一篇,不過原作者是用C#寫的,參考看看

    http://www.codeproject.com/cs/miscctrl/RicherRichTextBox.asp

    不合用的話就再自行搜尋看看其它的吧~

    2007年5月22日 下午 05:09
    版主
  • 知道原由之後,我自己應能處理。謝謝您,辛苦了。
    2007年5月23日 上午 12:45