Vb.net 异或替代品
我得到了以下方法:Vb.net 异或替代品,vb.net,Vb.net,我得到了以下方法: 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
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
。不使用运算符
Xor
实现相同结果的有效方法是什么
编辑(如us2012评论)我需要替代方案吗
我已经查过了,但在
boldButton\u Click
过程中仍然难以理解它的实现。从您的评论判断,您不理解Xor
在这里的作用,我认为一个解释将比人工的替代构造更能帮助您。如果你想了解它是如何工作的,你首先需要知道,一旦你知道了,想象一下,对于一种字体,字体样式被保存为0和1。为了简单起见,假设有3位,第一位表示粗体,第二位表示斜体,第三位表示下划线。(因此101带粗体下划线,011带斜体下划线,等等。此外,FontStyle.bold
是100等)
然后,与按位操作类似:
oldstyle或FontStyle.Bold
创建一个加粗的新样式,无论旧样式是否为。(如果oldstyle
为FontStyle.Italic
=010
,则010或100
=110
,因此新样式为粗体斜体。)
oldstyle Xor FontStyle.Bold
创建一个新样式,如果旧样式不是粗体,则为粗体;如果旧样式是粗体,则为不粗体。(假设oldstyle
是粗体和斜体,所以110
,那么110 Xor 100
就是010
,只有斜体。但是,如果旧样式是正常的000
,那么000 Xor 100
就是100
,所以只需粗体即可。)按位异或切换标志。让我们假设样式位字段如下所示
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)
请注意,其他位不受影响
由于您明确要求提供替代方案:您可以检查位是否设置为样式和粗体0
,然后将其设置为样式=样式或粗体
,或者将其删除样式=样式和(不粗体)
,如果此方法有效,为什么需要不同的方法?@us2012-因为我不理解它。。。另一种选择希望能对我有所帮助understand@us2012-我想我会编辑这个问题。+1谢谢你的选择-尽管@us2012猜测我需要先读一点关于位操作的内容(请原谅双关语)OK+1-我会在做任何其他事情之前阅读位引用!