用于Font Combo Box的ComboBox DrawItem事件处理 - WinForms,VB.NET

时间:2015-01-09 09:09:38

标签: vb.net winforms combobox

我正在创建一个组合框,它在列表中显示字体,每个字体项都以自己的字体样式显示。组合框加载没有错误,但显示的列表只有一种字体。我设置了DrawMode = OwnerDrawVariableIntegralHeight = false,但仍然没有结果。您可以在这里看到的DrawItem代码来自MSDN网站,根据我的要求进行了一些更改。这是我的代码:

    表单加载时会调用
  1. BindCOmboboxes()

    Private Sub w_BindComboBoxes()   (StyleControl is a User Control containing the combobox)
    
        'Set Properties
    
        Dim tFont As Font = Nothing
    
        StyleControl.TS1Font.DrawMode = DrawMode.OwnerDrawVariable
    
        For Each fntfam As FontFamily In FontFamily.Families
            If fntfam.IsStyleAvailable(FontStyle.Regular) Then
                tFont = New Font(fntfam, 12, FontStyle.Regular)
                StyleControl.TS1Font.Items.Add(tFont.Name & ",Regular")               
            End If
    
            If fntfam.IsStyleAvailable(FontStyle.Italic) Then
                tFont = New Font(fntfam, 12, FontStyle.Italic)
                StyleControl.TS1Font.Items.Add(tFont.Name & ",Italic")
            End If
    
            If fntfam.IsStyleAvailable(FontStyle.Bold) Then
                tFont = New Font(fntfam, 12, FontStyle.Bold)
                StyleControl.TS1Font.Items.Add(tFont.Name & ",Bold")
            End If
        Next
    
    End Sub
    
  2. DrawItem TS1Font组合框的功能

    Private Sub FontComboBoxDrawItems(sender As Object, e As DrawItemEventArgs)
    
        Dim size As Integer = 12
        Dim myFont As System.Drawing.Font
        Dim family As FontFamily = new FontFamily("Arial", 12)   <-- to avoid crash
        Dim fntStyle As FontStyle = FontStyle.Regular   <-- To avoid crash
        Dim animalColor As System.Drawing.Color = Color.Black
    
        Dim str As String = DirectCast(sender, ComboBox).Items(e.Index).ToString.Trim
        Dim brk() As String = str.Split(",")
        For Each fam As FontFamily In FontFamily.Families
            If fam.Name = brk(0) Then family = fam
        Next
        Select Case brk(1)
            Case "Regular"
                fntStyle = FontStyle.Regular
            Case "Bold"
                fntStyle = FontStyle.Bold
            Case "Italic"
                fntStyle = FontStyle.Italic
        End Select
    
        ' Draw the background of the item.
        e.DrawBackground()
    
        ' Draw each string in the array, using a different size, color, 
        ' and font for each item.
    
        myFont = New Font(family, size, fntStyle)
        e.Graphics.DrawString(DirectCast(sender, ComboBox).Items(e.Index).ToString, myFont, System.Drawing.Brushes.Black, 
            New PointF(e.Bounds.X, e.Bounds.Y))
    
    
        ' Draw the focus rectangle if the mouse hovers over an item.
        e.DrawFocusRectangle()
    
    End Sub
    
  3. DrawItem函数中进行调试时,语句e.Graphics.DrawString =中的值显示正确的字体系列,样式和大小值。那么为什么不以这种方式绘制物品呢?

    结果:
    enter image description here

0 个答案:

没有答案