2013-02-28 57 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