VB.Net中的布尔表 - 选择Case,If-Else还是其他?

时间:2010-10-12 20:39:21

标签: vb.net if-statement select fonts boolean

我正在寻求简化三项布尔表达式的处理。 “选择案例”似乎没有提供三值的解决方案,而If语句似乎有点多。它会按照我编码的方式工作,但如果你对如何简化它有任何想法,我会很感激你的见解。如果没有,我希望这段代码可以节省一些时间。

Public Sub SetThisFontStyle(ByRef theTextBox As RichTextBox, ByVal StyleToChange As String)

    'Get Initial Values:'
    Dim BoldState As Boolean = theTextBox.SelectionFont.Bold
    Dim ItalicState As Boolean = theTextBox.SelectionFont.Italic
    Dim UnderlineState As Boolean = theTextBox.SelectionFont.Underline

    'Find out what we re trying to change:'
    Select Case StyleToChange
        Case "Bold" : If BoldState Then BoldState = False Else BoldState = True
        Case "Italic" : If ItalicState Then ItalicState = False Else ItalicState = True
        Case "Underline" : If UnderlineState Then UnderlineState = False Else UnderlineState = True
        Case Else : Exit Sub
    End Select

    'Boolean Table just for reference:'
    '0 - 0 - 0 None'
    '1 - 0 - 0 Bold Only'
    '0 - 1 - 0 Italic Only'
    '0 - 0 - 1 Underline Only'
    '1 - 1 - 0 Bold and Italic'
    '0 - 1 - 1 Italic and Underline '
    '1 - 0 - 1 Bold and Underline'
    '1 - 1 - 1 Bold, Italic, and Underline'

    If Not BoldState And Not ItalicState And Not UnderlineState Then
        'Regular, without any styles'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Regular)
    ElseIf BoldState And Not ItalicState And Not UnderlineState Then
        'Bold Only'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Bold)
    ElseIf Not BoldState And ItalicState And UnderlineState Then
        'Italic Only'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Italic)
    ElseIf Not BoldState And Not ItalicState And UnderlineState Then
        'Underline Only'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Underline)
    ElseIf BoldState And ItalicState And Not UnderlineState Then
        'Bold and Italic'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Bold + Drawing.FontStyle.Italic)
    ElseIf Not BoldState And ItalicState And UnderlineState Then
        'Italic and Underline'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Italic + Drawing.FontStyle.Underline)
    ElseIf BoldState And Not ItalicState And UnderlineState Then
        'Bold and Underline'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Bold + Drawing.FontStyle.Underline)
    ElseIf BoldState And ItalicState And UnderlineState Then
        'Bold, Italic, and Underline'
        theTextBox.SelectionFont = _
        New Font(txtRichText.SelectionFont, Drawing.FontStyle.Bold + Drawing.FontStyle.Italic + Drawing.FontStyle.Underline)
    Else
        Exit Sub
    End If

End Sub

2 个答案:

答案 0 :(得分:1)

我会使用带有[Flags]属性的枚举,然后你可以检查组合。它还可以使代码更具可读性。

[Flags]
public enum TextSettingType
{
    None = 0x0,
    Bold = 0x1,
    Italic = 0x2,
    Underline = 0x3
}

对C#感到抱歉,不知道如何将其转换为VB.Net

答案 1 :(得分:1)

 'Boolean Table just for reference:'
        '0 - 0 - 0 None' = 0
        '1 - 0 - 0 Bold Only' = 4
        '0 - 1 - 0 Italic Only' = 2
        '0 - 0 - 1 Underline Only' = 1
        '1 - 1 - 0 Bold and Italic' = 6
        '0 - 1 - 1 Italic and Underline' = 3
        '1 - 0 - 1 Bold and Underline' = 5
        '1 - 1 - 1 Bold, Italic, and Underline' = 7

        Dim bold As Boolean = False
        Dim italic As Boolean = False
        Dim under As Boolean = False
        Dim fNum As Byte

        If chkBold.Checked Then
            bold = True
        End If
        If chkItalic.Checked Then
            italic = True
        End If
        If chkUnder.Checked = True Then
            under = True
        End If

        fNum = ((4 * Convert.ToByte(bold)) + (2 * Convert.ToByte(italic)) + (1 * Convert.ToByte(under)))
        'MsgBox(fNum)

        Select Case fNum
            Case 0
                ' Regular
                txtEntry.Font = New Font("Arial", 12, FontStyle.Regular)
            Case 1
                ' Underline
                txtEntry.Font = New Font("Arial", 12, FontStyle.Underline)
            Case 2
                ' Italic
                txtEntry.Font = New Font("Arial", 12, FontStyle.Italic)
            Case 3
                ' Italic and Underline
                txtEntry.Font = New Font("Arial", 12, FontStyle.Italic Or FontStyle.Underline)
            Case 4
                ' Bold
                txtEntry.Font = New Font("Arial", 12, FontStyle.Bold)
            Case 5
                ' Bold and Underline
                txtEntry.Font = New Font("Arial", 12, FontStyle.Bold Or FontStyle.Underline)
            Case 6
                ' Bold and Italic
                txtEntry.Font = New Font("Arial", 12, FontStyle.Bold Or FontStyle.Italic)
            Case 7
                'Bold, Italic, and Underline
                txtEntry.Font = New Font("Arial", 12, FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
        End Select