2011-03-01 123 views
0

部分繼續我剛纔的問題(linkWindows窗體的字體問題2

如果我想要分配新的用戶控制它的創造者的字體的字體。我應該這樣做a):

newControl = new MyControl(...); 
...  
newControl.Font = this.Font; 

或這個b)?

newControl = new MyControl(...); 
... 
newControl.Font = (Font)this.Font.Clone(); 

如果答案是),會發生什麼新的用戶控件的字體,如果創作者的字體得到安置(例如,一個窗口由用戶關閉)?

感謝,

吉爾伯特

+0

無益的答案吸。 – 2011-03-01 00:57:49

回答

0

如果您正試圖執行一個恆定的外觀/覺得你的應用程序...比如使用字體X,尺寸Y,顏色ž在所有形式的所有標籤,我將從標籤中定義我自己的類,並使用只讀GETTER調用和不使用SETTER來聲明這些元素。這將阻止設計者甚至序列化這些信息。所以,你改變了你的根類的字體信息ONCE,並且你的標籤所使用的所有位置都將強制爲字體。您可能需要根據變化調整對齊方式,但所有視覺方面都將保持不變。此外,我已經用文本框,組合框,多行文本框,按鈕和複選框來完成此操作。很棒。所以,當我以只讀方式啓動給定的元素時,應用程序的構建會拋出一堆關於只讀屬性的錯誤。因此,我會快速掃描並刪除設計器的序列化元素並進行清理。奇蹟般有效。如果這是您所期望的,我可以提供更多關於我如何實施它的示例代碼。

0

Font類實際上封裝了兩件事情:

  • 文本樣式

  • 一個GDI句柄可以用來繪製文本與風格

文本樣式由一個Font類封裝是不可變的;該句柄是「一次性不可變的」,意思是它永遠不會封裝除創建它之外的任何GDI句柄,但一旦處置了Font,它將停止封裝任何字體句柄(它變成真正不可變的,儘管沒用,在那時候)。

設置在框架控件的Font屬性將導致它抓住兩件事情:

  • 用來設置該屬性Font對象,這是由Font使用的身份property getter

  • 控件將用來創建自己的私人對象Font的文本樣式。

因爲每個框架控制本身將克隆用於設置其屬性Font任何Font情況下,一般不需要用戶代碼中使用它來設置其他控件的Font屬性之前,克隆的字體。