2013-03-20 65 views
2

我必須在未定義.Font屬性的標籤上設置.Font.Bold = True,但從窗體繼承Font(名稱,大小,樣式)。爲此,我從表單的設計器文件中清除她的.Font屬性。在繼承標籤上設置Font.Bold

現在我需要設置這個標籤的文字是沒有定義的字體名稱,這個標籤大小等大膽。

我嘗試:

label6.Font.Bold = True 

但這不工作(物業.Font.Bold是隻讀的)。

label6.Font = New Font(myfontname, 10, FontStyle.Bold, GraphicsUnit.Point) 

然後我得到粗體文字標籤,但隨後沒有inherite形式的字體大小了:
如果我這個標籤像設置字體。

在這裏有可能保持形式的字體繼承標記,但得到這樣的標籤上大膽的文字?

回答

5

不行,因爲你已經發現了Font.Bold屬性爲只讀。字體對象是不可變的,這意味着它們的屬性一旦被創建就不能被改變。修改此屬性的唯一方法是創建一個新的Font對象。

創建這一新的字體,可以肯定的屬性複製現有的字體對象(比如你的表單中使用的一個),但沒有兩個字體對象一起的方式來動態的夫婦。如果表單使用的字體大小發生更改,則將爲表單創建一個新的Font對象,但您的自定義粗體Font對象不會更新。

,使這個混亂的唯一的事情是,有一點點魔法的推移,如果你不設置子控件的自定義字體。他們自動繼承父母的字體(容器控件,如表單)。當它們沒有明確設置時,從父級獲取它們的值的這些屬性被稱爲環境屬性。環境屬性在適用的情況下在the documentation中解釋。但結果是氛圍在你明確設置財產的地方消失了。所以忘了那個。

達到你想要什麼,我們需要得到一個通知,當窗體的字體大小變化和反應,你可以爲你的Label控件的新的大小創建一個新的大膽的字體對象。幸運的是,FontChanged event就是這樣一種機制。處理表單的FontChanged事件,並作爲響應爲您的Label控件創建一個新的Font對象。例如:

Private Sub myForm_FontChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myForm.FontChanged 
    Dim oldFont As Font = myLabel.Font 
    myLabel.Font = New Font(myForm.Font, myForm.Font.Style Or FontStyle.Bold) 
    oldFont.Dispose() 
End Sub 

雖然,我不確定是否/爲什麼這是非常必要的。在應用程序運行時,很少會發生表單字體大小發生變化。一般情況下,這隻會在創建時發生,在這種情況下,當您檢索值以爲您的Label控件創建自定義Font對象時,它已被正確設置。

+0

嗨科迪。根據你以前的幫助,用鼠標滾輪來改變表單的字體大小,我會爲項目中的所有表單做這件事。但是在一種形式中,由於musewheel zoom fininality的存在,可能會隨時更改字體,所以我需要在標籤上加粗字體。如你所說,我現在在_FontChanged處理程序下面。 Label6.Font =新字體(Me.Font.Name,Me.Font.Size,FontStyle.Bold,GraphicsUnit.Point)。非常感謝您的幫助和廣泛的解釋。 – 2013-03-21 00:10:56