我正在寻求简化三项布尔表达式的处理。 “选择案例”似乎没有提供三值的解决方案,而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
答案 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