我正在尝试开发一个自定义组合框(位于工具栏中),其中条目包括 5 种字体样式,我希望按照它们的外观显示。
问题:我无法设置每个项目的大小。 MeasureItem 事件没有触发,我不知道原因。
离我的节奏还有一段距离! ^^
这是我的代码:
Public CorpusFontStyleTitre1 As Font = New Font(New FontFamily("Lato"), 18, FontStyle.Bold, 3)
Public CorpusFontStyleTitre2 As Font = New Font(New FontFamily("Lato"), 16, FontStyle.Underline Or FontStyle.Bold, 3)
Public CorpusFontStyleTitre3 As Font = New Font(New FontFamily("Lato"), 14, FontStyle.Underline Or FontStyle.Bold, 3)
Public CorpusFontStyleTitre4 As Font = New Font(New FontFamily("Lato"), 12, FontStyle.Underline, 3)
Public CorpusFontStyleCorpsdeTexte As Font = New Font(New FontFamily("Lato"), 12, FontStyle.Regular, 3)
Public Structure CorpusFontStyleItem
Dim strTextStyleName As String
Dim fontTextStyle As Font
Public Overrides Function ToString() As String
Return strTextStyleName
End Function
End Structure
Private Sub frmCorpusManagement_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadcmbFontStyle()
cmbFontStyle.ComboBox.DrawMode = DrawMode.OwnerDrawFixed
AddHandler cmbFontStyle.ComboBox.DrawItem, AddressOf cmbFontStyle_DrawItem
AddHandler cmbFontStyle.ComboBox.MeasureItem, AddressOf cmbFontStyle_MeasureItem
End Sub
Private Sub cmbFontStyle_MeasureItem(ByVal sender As Object, ByVal e As MeasureItemEventArgs)
Select Case e.Index
Case "1"
e.ItemHeight = 50
Case "2"
e.ItemHeight = 40
Case "3"
e.ItemHeight = 30
Case "4"
e.ItemHeight = 20
Case "5"
e.ItemHeight = 10
End Select
End Sub
Private Sub cmbFontStyle_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs)
e.DrawBackground()
Dim myItem As CorpusFontStyleItem = DirectCast(cmbFontStyle.Items(e.Index), CorpusFontStyleItem)
e.Graphics.DrawString(myItem.strTextStyleName, myItem.fontTextStyle, New SolidBrush(Color.Black), e.Bounds)
e.DrawFocusRectangle()
End Sub
Private Sub LoadcmbFontStyle()
Dim itemCorpusFontStyleTitre1 As New CorpusFontStyleItem With {.strTextStyleName = "Titre 1", .fontTextStyle = CorpusFontStyleTitre1}
Dim itemCorpusFontStyleTitre2 As New CorpusFontStyleItem With {.strTextStyleName = "Titre 2", .fontTextStyle = CorpusFontStyleTitre2}
Dim itemCorpusFontStyleTitre3 As New CorpusFontStyleItem With {.strTextStyleName = "Titre 3", .fontTextStyle = CorpusFontStyleTitre3}
Dim itemCorpusFontStyleTitre4 As New CorpusFontStyleItem With {.strTextStyleName = "Titre 4", .fontTextStyle = CorpusFontStyleTitre4}
Dim itemCorpusFontStyleCorps As New CorpusFontStyleItem With {.strTextStyleName = "Corps de Texte", .fontTextStyle = CorpusFontStyleCorpsdeTexte}
cmbFontStyle.Items.Add(itemCorpusFontStyleTitre1)
cmbFontStyle.Items.Add(itemCorpusFontStyleTitre2)
cmbFontStyle.Items.Add(itemCorpusFontStyleTitre3)
cmbFontStyle.Items.Add(itemCorpusFontStyleTitre4)
cmbFontStyle.Items.Add(itemCorpusFontStyleCorps)
End Sub
Private Sub frmCorpusManagement_Load(sender As Object, e As EventArgs) Handles MyBase.Load cmbFontStyle.ComboBox.DrawMode = DrawMode.OwnerDrawFixed AddHandler cmbFontStyle.ComboBox.DrawItem, AddressOf cmbFontStyle_DrawItem AddHandler cmbFontStyle.ComboBox.MeasureItem, AddressOf cmbFontStyle_MeasureItem LoadcmbFontStyle() End Sub
- 8oris