VB 의문점 part2
작성한 것은 이러한 디자인으로 참고서의 디자인을 바탕으로 작성했습니다.
참고서가 VB6.0의 것이었기 때문에, 비주얼 스튜디오를 이용해 스스로 작성한 것이 됩니다.
코드는 다음과 같습니다.
※이 시점에서는 아직 날짜 표시, 시각 표시, 굵게, 기울임꼴, 밑줄만이 되고 있습니다.
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
각 라벨과 체크박스의 이름은 다음과 같습니다.
영어 표시:lblDate, 한국어 표시:lblDate1
12h:lblTime, 24h:lblTime1
굵게: chkBold, 기울임꼴: chkItalic, 밑줄: chkUnderLine
여기서 의문이 된 것이 폰트 지정 부분의 코드 간략화입니다.
솔직히 이것은 Qiita에 올리기 전에 우선 동작하면 좋다고 해서 단순한 조건 분기로 만든 것이므로, 스스로 납득하고 있지 않습니다.
척의 유무의 패턴을 1개 1개 확인해 거기에 대응하도록(듯이) 폰트를 지정하고 있을 뿐이므로, 매우 사람에게 보여지는 것은 아닙니다. .
일단 자신 나름대로 여러가지 생각해 보고 간략화에 도전했습니다.
단순화를 목표로 그 1
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 문이라면 중첩 할 수밖에 없을지도? ……
단순화를 목표로 그 2
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 = ""라고 했는데 아무래도 네요. 웃음
단순화를 목표로 그 3
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 문도 해 보았습니다만, 격침입니다.
뭔가 방법이 있으면 조금 공부하십시오.
이상입니다!
Reference
이 문제에 관하여(VB 의문점 part2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Miya49_p0/items/c124ca408a08ec4396dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)