我得到了以下方法:
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评论)我需要一个替代方案吗?
我已经查找了MSDN上的异或,但仍然很难理解boldButton_Click过程中的实现。
发布于 2013-02-28 08:16:14
按位XOR切换一个标志。假设样式位域如下所示
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)注意,其他位元不受影响。
因为您显式地要求选择:您可以检查bit是否设置为style And Bold <> 0,然后将其设置为style = style Or Bold或移除它为style = style And (Not Bold)。
发布于 2013-02-28 08:15:38
从你的评论来看,你不明白Xor在这里做了什么,我认为一个解释会给你带来更多的帮助,而不仅仅是一个人工的替代结构。如果您想了解它是如何工作的,那么首先需要了解一下按位操作。,假设对于一个字体,字体样式被保存为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,所以只是粗体。)
https://stackoverflow.com/questions/15130181
复制相似问题