2013-02-28 58 views
4

我一直在考慮下面的方法:替代異或

Private Sub boldButton_Click(sender As System.Object, e As System.EventArgs) Handles boldButton.Click 
    Dim curFont As Font 
    Dim newFont As Font 
    curFont = rtb.SelectionFont 
    If curFont IsNot Nothing Then 
     'create the new font 
     newFont = New Font(curFont.FontFamily, curFont.Size, curFont.Style Xor FontStyle.Bold) 
     'set it 
     rtb.SelectionFont = newFont 
    End If 
End Sub 

目前有問題的理解是什麼的代碼curFont.Style Xor FontStyle.Bold的這部分發生。在不使用operatorXor的情況下達到相同結果的有效方法是什麼?

編輯(如評論us2012)我需要一個替代?

我查過了Xor on MSDN,但仍然無法理解boldButton_Click程序中的執行情況。

+0

爲什麼你需要一種不同的方式,如果這個工程? – us2012 2013-02-28 07:53:38

+0

@ us2012 - 因爲我不明白! ...另一種方法有望幫助我理解 – whytheq 2013-02-28 08:06:45

+0

@ us2012 - 我想我會編輯這個問題。 – whytheq 2013-03-07 21:22:47

回答

4

位異或切換的標誌。讓我們假定樣式位域看起來像這樣

00000000 
    ^^^ 
    BIU (Bold, Italic, Underline) 

所以FontStyle.Bold值將是:

00000100 

現在something Xor FontStyle.Bold將只需扳動此位something。例如:

00000111 Xor 00000100 = 00000011 (Boldness removed) 
00000001 Xor 00000100 = 00000101 (Boldness added) 

請注意,其他位不受影響。


既然你明確地要求選擇:你可以檢查該位是否被設置style And Bold <> 0,然後將它設置style = style Or Bold或刪除其style = style And (Not Bold)

+1

+1感謝您的選擇 - 雖然作爲@ us2012猜測我需要先閱讀一點點(原諒雙關語)位運算 – whytheq 2013-02-28 08:35:48

4

從你的評論來看,你不明白Xor在這裏做什麼,我認爲一個解釋將幫助你不僅僅是一個人造的替代建築。如果你想了解它是如何工作的,你首先需要知道bitwise operations.一旦你知道了,想象一下,對於一種字體,字體樣式保存爲0和1。爲簡單起見,假設有3位,第一位爲粗體,第二位爲斜體,第三位爲下劃線。 (所以101是粗體下劃線,011是斜體下劃線等等。此外,FontStyle.Bold是100等)。

然後,在類比的位操作:

oldstyle Or FontStyle.Bold創建一個新的風格,是大膽的,無論老的風格是否。 (如果oldstyleFontStyle.Italic = 010,然後010 Or 100 = 110,所以新的風格是粗斜體)。

oldstyle Xor FontStyle.Bold創建一個新的風格,大膽如果舊的風格是不是,也不大膽如果舊風格膽大。 (比方說oldstyle既是粗體和斜體,所以110,則110 Xor 100010,所以斜體而已。但是,如果舊的風格是正常000,然後000 Xor 100100,所以才大膽。)

+0

好的+1 - 我會在做任何事之前閱讀按位參考! – whytheq 2013-02-28 08:36:20