投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/5/25 23:29:04
> データベース講座の参考
.NET 編の第五回ですね?
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database5.htm

> e.DrawFocusRectangle()とは、どういう処理をしているのでしょうか?
ComboBox の DropDownStyle プロパティを、DropDownList に設定するとわかるかと思います。

なお、あのサンプルでは myBrush 変数の解放処理が漏れていますので、修正しておいた方が良いかと。


Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)
    Dim isSelected As Boolean = CBool(e.State And DrawItemState.Selected)

    Dim backgroundColor As Color
    If isSelected Then
        backgroundColor = Color.White
    Else
        backgroundColor = ForeColor
    End If

    e.DrawBackground()
    Dim LineLeft As Integer = e.Bounds.X + ListWidth1
    Using myBrush As New SolidBrush(backgroundColor)
        Dim Row As DataRowView = DirectCast(Me.Items(e.Index), DataRowView)
        Dim ItemString1 As String = CStr(Row(ListMember1))
        Dim ItemString2 As String = CStr(Row(ListMember2))
        Dim Rect As RectangleF

        Rect = New RectangleF(e.Bounds.X, e.Bounds.Y, LineLeft, e.Bounds.Height)
        e.Graphics.DrawString(ItemString1, e.Font, myBrush, Rect)

        e.Graphics.DrawLine(Pens.Black, LineLeft, e.Bounds.Y, LineLeft, e.Bounds.Y + e.Bounds.Height)

        Rect = New RectangleF(LineLeft + 1, e.Bounds.Y, e.Bounds.Width - LineLeft - 1, e.Bounds.Height)
        e.Graphics.DrawString(ItemString2, e.Font, myBrush, Rect)
    End Using
    If isSelected Then
        e.DrawFocusRectangle()
    End If
End Sub