[英]How to change the fontstyle without creating a new font?
我正在嘗試做一些可能非常簡單的事情,但我嘗試的一切似乎都不起作用。
我正在制作一個 windows forms 應用程序,它只允許您使用充滿不同 fonts 的手預覽一些自定義文本。
我要做的是在選中復選框時將 label 的字體樣式更改為斜體。 在保留當前字體的同時。
“顯示”是我的 label 的名稱。 “Italicscb”是復選框的名稱。
以下是我目前正在使用的代碼:
Private Sub Italicscb_CheckedChanged(sender As Object, e As EventArgs) Handles
Italicscb.CheckedChanged
If Italicscb.CheckState = CheckState.Checked Then
Display.Font = New Font("Arial", 60, FontStyle.Italic)
Else
If Italicscb.CheckState = CheckState.Unchecked Then
Display.Font = New Font("Arial", 60, FontStyle.Bold)
End If
End If
End Sub
這工作正常,但它需要我輸入一個新的字體名稱。 這是我不想要的。 我試圖為當前字體分配一個變量並將其插入,但這給了我一個錯誤。
Dim CF As Font
CF = Display.Font
If Italicscb.CheckState = CheckState.Checked Then
Display.Font = New Font(CF, 60, FontStyle.Italic)
Else
If Italicscb.CheckState = CheckState.Unchecked Then
Display.Font = New Font(CF, 60, FontStyle.Bold)
End If
End If
End Sub
我還嘗試在單個字體選項按鈕中放置一個 if then 循環。 沒有錯誤,但是當我選中該框時沒有任何反應。
if Italicscb.CheckState = CheckState.Checked Then
Display.Font = New Font("Freehand521 BT", 60, FontStyle.Italic)
Else
Display.Font = New Font("Freehand521 BT", 60, FontStyle.Bold)
End If
如果有人能指出我做錯了什么。 我真的很感激。 順便說一句,我正在為我的工作做這個。
謝謝你。
首先,使用.Checked
而不是.CheckState
,這樣可以避免做很多不必要的檢查:
If Italicscb.Checked Then
'Italic
Else
'Not italic
End If
現在,如果您只想更改 Display 的 fontStyle(使用現有的字體名稱和大小),您可以使用構造函數Font(Font, FontStyle)創建一個新的 Font,因此您的代碼將是:
Private Sub Italicscb_CheckedChanged(sender As Object, e As EventArgs) Handles Italicscb.CheckedChanged
If Italicscb.Checked Then
Display.Font = New Font(Display.Font, FontStyle.Italic)
Else
Display.Font = New Font(Display.Font, FontStyle.Regular)
End If
End Sub
也可以使用優雅的單行獲得相同的結果:
Private Sub Italicscb_CheckedChanged(sender As Object, e As EventArgs) Handles Italicscb.CheckedChanged
Display.Font = New Font(Display.Font, If(Italicscb.Checked, FontStyle.Italic, FontStyle.Regular))
End Sub
這是 output:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.