我得到了以下方法:
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
的这一部分时遇到的问题。在不使用operator
Xor
的情况下获得相同结果的有效方法是什么?
编辑(由us2012评论)我需要替代方案吗?
我查了Xor on MSDN但仍无法理解boldButton_Click
程序中的实施情况。
答案 0 :(得分:4)
根据你的评论判断你不明白Xor
在这里做了什么,我认为解释会比人工替代建筑更有帮助。如果你想了解它是如何工作的,你首先需要了解bitwise operations.一旦你知道了,想象一下,对于字体,字体样式保存为0和1。为简单起见,假设有3位,第一位用于粗体,第二位用于斜体,第三位用于下划线。 (所以101是粗体下划线,011是斜体下划线等。此外,FontStyle.Bold
是100等。)。
然后,与按位操作类似:
oldstyle Or FontStyle.Bold
创造了一种大胆的新风格,无论旧风格如何。 (如果oldstyle
为FontStyle.Italic
= 010
,则010 Or 100
= 110
,则新样式为粗体斜体。)
oldstyle Xor FontStyle.Bold
创建一个新样式,如果旧样式不是粗体,则粗体,如果旧样式是粗体,则不粗体。 (假设oldstyle
是粗体和斜体,所以110
,然后110 Xor 100
是010
,所以只是斜体。但是旧样式是正常的000
,然后000 Xor 100
是100
,所以只需加粗。)
答案 1 :(得分: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)
。