2014-04-24 43 views
0

我正在開發允許用戶保存其首選字體(系列,大小,下劃線,粗體或斜體)的應用程序中。我應該首先說,在開發或二元開發的前幾年,或者在構造函數的內部,我沒有使用過多的枚舉,所以我在這方面的知識很薄弱。使用二進制或字體樣式的動態枚舉標誌數

許多人都知道,設置新字體很簡單。

Font font = new Font("Arial", FontStyle.Bold | FontStyle.Underline); 

我的問題是,如果有突入構造下劃線的組合中的任何一個的清潔方式,粗體或斜體這可能是他們沒有的,也許只是大膽的,粗體或斜體等?

對我來說乾淨並不一定非得這樣做。

if(myFont.Bold || myFont.Underline || myFont.Italic) 
{ 
    font = new Font("Arial", FontStyle.Bold | FontStyle.Underline | FontStyle.Italic); 
} 
else if(myFont.Bold || myFont.Underline) 
{ 
    font = new Font("Arial", FontStyle.Bold | FontStyle.Underline); 
} 
else if(myFont.Bold || myFont.Italic) 
{ 
    font = new Font("Arial", FontStyle.Bold | FontStyle.Italic); 
} 

...等等

+0

你會定義什麼樣的* clean *? –

+0

這個我不明白。你期望寫什麼樣的代碼? – nneonneo

+0

對我來說乾淨,不需要使用邏輯來確定我需要的字體樣式的數量,併爲這三種字體樣式的組合創建7種不同的構造函數。 –

回答

1

你可以做這樣的事情:

string fontName = "Arial"; 
FontStyle style = FontStyle.Regular; 

if (myFont.Bold) 
    style |= FontStyle.Bold; 

if (myFont.Underline) 
    style |= FontStyle.Underline; 

if (myFont.Italic) 
    style |= FontStyle.Italic; 

Font font = new Font(fontName, style); 
+1

FYI那些邏輯運算符應該是| =而不是&= – RogerN

+0

@RogerN謝謝,剛剛意識到這一點。 –

+0

謝謝!這效果很好! –

0

你不能有相同的簽名多個構造函數,所以這是一個非首發,除非你人爲地創造虛擬參數只是爲了區分它們。

相反,您應該創建不同的靜態方法,例如,靜態MyClass CreateBoldItalic(),每個組合需要一個。這些將使用您選擇的組合實例化課程。

0

你可以做這樣的事情。請使用Font's constructor或適合您的任何一種超載。

Font myFont = ...;//get your font 
Font font = new Font("Arial", myFont.Size, myFont.Style);