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。在不使用 ? 的情况下获得相同结果的有效方法是operator Xor什么?

编辑(由 us2012 评论)我需要替代方案吗?

在 MSDN 上查找了 Xor,但仍然无法理解它在boldButton_Click过程中的实现。

4

2 回答 2

4

从你的评论来看,你不明白Xor这里做了什么,我认为解释比人为的替代结构更能帮助你。如果你想了解它是如何工作的,你首先需要了解按位运算。一旦你知道这一点,想象一下对于字体,字体样式保存为 0 和 1。为简单起见,假设有 3 位,第一个为粗体,第二个为斜体,第三个为下划线。(所以 101 是粗体下划线,011 是斜体下划线等。此外,FontStyle.Bold是 100 等)。

然后,类似于按位运算:

oldstyle Or FontStyle.Bold创造一种大胆的新风格,无论旧风格是否。(如果oldstyleFontStyle.Italic= 010,那么010 Or 100= 110,所以新样式是粗斜体。)

oldstyle Xor FontStyle.Bold创建一个新样式,如果旧样式不是粗体,则它是粗体,如果旧样式是粗体,则不是粗体。(假设oldstyle是粗体和斜体,so 110, then 110 Xor 100is 010, so italic only。但是如果旧样式是 normal 000, then 000 Xor 100is 100, so just bold。)

于 2013-02-28T08:15:38.157 回答
4

按位异或切换标志。让我们假设 Style 位域看起来像这样

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)

于 2013-02-28T08:16:14.010 回答