VB　疑問点part2

今回もまたコードの簡略化が疑問点となります。
作成した物はこのようなデザインで、参考書のデザインをもとに作成しました。
参考書がVB6.0の物であったため、visual studioを用いて自分で作成した物となります。

<img src = "https://qiita-image-store.s3.amazonaws.com/0/185455/f7233ac3-7408-0c89-60d1-8ca5e43cc099.png" width = 50%>

コードは以下の物になります。
>※この時点ではまだ日付表示、時刻表示、太字、斜体、下線のみとなっております。

```
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

'　日付、時間の条件分岐
    Private Sub time()

        If optDate.Checked And optTime.Checked = True Then
            ' 英語＆12h
            lblDate.Text = Format(Microsoft.VisualBasic.Today, "yyyy/MM/dd cl")
            lblTime.Text = Format(Microsoft.VisualBasic.TimeOfDay, "hh:mm:ss")
        ElseIf optDate.Checked And optTime1.Checked = True Then
            ' 英語＆24h
            lblDate.Text = Format(Microsoft.VisualBasic.Today, "yyyy/MM/dd")
            lblTime.Text = Format(TimeString)
        ElseIf optDate1.Checked And optTime.Checked = True Then
            ' 日本語＆12h
            lblDate.Text = Format(Microsoft.VisualBasic.Today, "yyyy年MM月dd日 (dddd)")
            lblTime.Text = Format(Microsoft.VisualBasic.TimeOfDay, "hh:mm:ss  tt")
        Else
            ' 日本語＆24h
            lblDate.Text = Format(Microsoft.VisualBasic.Today, "yyyy年MM月dd日 (dddd)")
            lblTime.Text = Format(TimeString)
        End If

    End Sub

' 全チェックオブジェクト対応プロシージャ
    Private Sub CheckedChanged(sender As Object, e As EventArgs) Handles _
        optDate.CheckedChanged, optDate1.CheckedChanged, optTime.CheckedChanged, optTime1.CheckedChanged,
        chkBold.CheckedChanged, chkItalic.CheckedChanged, chkUnderLine.CheckedChanged

        If optDate.Checked Or optDate1.Checked Or optTime.Checked Or optTime1.Checked = True Then
            time()
        End If

'　フォント指定
        If chkBold.Checked = True And chkItalic.Checked = True And chkUnderLine.Checked = True Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
        ElseIf chkBold.Checked = True And chkItalic.Checked = True And chkUnderLine.Checked = False Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Italic)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Italic)
        ElseIf chkBold.Checked = True And chkItalic.Checked = False And chkUnderLine.Checked = True Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Underline)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Bold Or FontStyle.Underline)
        ElseIf chkBold.Checked = True And chkItalic.Checked = False And chkUnderLine.Checked = False Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Bold)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Bold)
        ElseIf chkBold.Checked = False And chkItalic.Checked = True And chkUnderLine.Checked = True Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Italic Or FontStyle.Underline)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Italic Or FontStyle.Underline)
        ElseIf chkBold.Checked = False And chkItalic.Checked = True And chkUnderLine.Checked = False Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Italic)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Italic)
        ElseIf chkBold.Checked = False And chkItalic.Checked = False And chkUnderLine.Checked = True Then
            lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Underline)
            lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Underline)
        ElseIf chkBold.Checked = False And chkItalic.Checked = False And chkUnderLine.Checked = False Then
            lblDate.Font = New Font("ms ul gothic", 10)
            lblTime.Font = New Font("ms ul gothic", 10)
        End If
    End Sub
End Class

``` 
各ラベルやチェックボックスのNameは以下の通りです。
>英語表示:lblDate, 日本語表示:lblDate1
>12h:lblTime,　24h:lblTime1
>太字:chkBold, 斜体:chkItalic, 下線:chkUnderLine

ここで疑問となったのがフォント指定の部分のコード簡略化です。
正直これはQiitaに上げる前にとりあえず動作すればいいとおもって単純な条件分岐で作ったものなので、自分で納得いってません。
チャックの有無のパターンを１つ１つ確認してそれに対応するようにフォントを指定しているだけなので、とても人に見せれるものではないです。。

一応自分なりにいろいろと考えてみて簡略化に挑戦しました。

## 簡略化目指しその１

```
If chkBold.Checked = True Then
    lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Bold)
    lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Bold)
ElseIf chkItalic.Checked = True Then
    lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Italic)
    lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Italic)
ElseIf chkUnderLine.Checked = True Then
    lblDate.Font = New Font("ms ul gothic", 10, FontStyle.Underline)
    lblTime.Font = New Font("ms ul gothic", 10, FontStyle.Underline)
Else
    lblDate.Font = New Font("ms ul gothic", 10)
    lblTime.Font = New Font("ms ul gothic", 10)
End If
```
まず初めにやったこと。
実行してから気付きましたがこれだと太字＋斜体等複数の指定時に
フォント対応することが出来ない！

if文だと入れ子にするしかないかも？……

## 簡略化目指しその２

```
Dim a As FontStyle
Dim b As FontStyle
Dim c As FontStyle

If chkBold.Checked Or chkItalic.Checked Or chkUnderLine.Checked = False Then
    If chkBold.Checked = True Then
        a = FontStyle.Bold
    End If

    If chkItalic.Checked = True Then
        b = FontStyle.Italic
    End If

    If chkUnderLine.Checked = True Then
        c = FontStyle.Underline
    End If

    lblDate.Font = New Font("ms ul gothic", 10 Or a Or b Or c)
    lblTime.Font = New Font("ms ul gothic", 10 Or a Or b Or c)
End If
```
これだとそもそも チェックを入れtrueにしaに代入したあとチェックを外した場合
どうすればaの中身が消えるのか。。。
`FontStyle.Bold = false`みたいなことが出来ればelse文が書けるが、.netには、んー
ちなみにelseにa = ""とやりましたがまぁむりですね。笑

## 簡略化目指しその３
```
Dim a As String

If chkBold.Checked Or chkItalic.Checked Or chkUnderLine.Checked = False Then
    a = "New Font( " + Chr(34) + "ms ul gothic" + Chr(34) + ", 10"
    If chkBold.Checked = True Then
        a = a + "Or FontStyle.Bold"
    End If

    If chkItalic.Checked = True Then
        a = a + "Or FontStyle.Italic"
    End If

    If chkUnderLine.Checked = True Then
        a = a + "Or FontStyle.Underline"
    End If
    a = a + ")"

    lblDate.Font = a
    lblTime.Font = a
End If
```
ならば文字列にして、後ろに連結をしていき最後に")"で括って形を完成させればいいのでは？
と思いやってみたのですが、

>重大度レベル	コード	説明	プロジェクト	ファイル	行	抑制状態
>エラー	BC30311	型 **'String' の値を 'Font'** に変換できません。	p168

そりゃそうですよね。 

簡略化ってやっぱりまだ難しい。
ちなみにselect case文もやってみましたが、撃沈です。

なにか方法があれば少しお勉強させてください。

以上です！