I have a combobox with several customised items. Here's my code (which works perfectly):
Private intcmbFontStyleTotalHeight As Integer
Private CorpusFontStyleTitre1 As Font = New Font(New FontFamily("Lato"), 18, FontStyle.Bold, 3)
Private CorpusFontStyleTitre2 As Font = New Font(New FontFamily("Lato"), 16, FontStyle.Underline Or FontStyle.Bold, 3)
Private CorpusFontStyleTitre3 As Font = New Font(New FontFamily("Lato"), 14, FontStyle.Underline Or FontStyle.Bold, 3)
Private CorpusFontStyleTitre4 As Font = New Font(New FontFamily("Lato"), 12, FontStyle.Underline, 3)
Private CorpusFontStyleCorpsdeTexte As Font = New Font(New FontFamily("Lato"), 12, FontStyle.Regular, 3)
Private FontStyleForDisplay As Font = New Font(New FontFamily("Lato"), 9, 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.OwnerDrawVariable
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
cmbFontStyle.DropDownHeight = intcmbFontStyleTotalHeight
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
Now, I need that the selected item displays using FontStyleForDisplay (same feature as the font combobox in Word).
I guessed it would be achieved with SelectedIndexChanged event and tried this but doesn't seem to work:
Private Sub cmbFontStyle_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFontStyle.SelectedIndexChanged
cmbFontStyle.SelectedItem.Graphics.DrawString(cmbFontStyle.Text, FontStyleForDisplay, New SolidBrush(Color.Black), cmbFontStyle.SelectedItem.Bounds)
cmbFontStyle.SelectedItem.DrawFocusRectangle()
End Sub
I found some answers for wpf but not for Winforms