HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


VB.NET 2005の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > VB.NET 2005 Tips > コントロール > ComboBox Tips メニュー

15.オーナードローを使用する

UPDATE:2006/08/30 

<< 前のTips  次のTips >>

 

 オーナードローを使用することで、コンボボックスのアイテムを自由に描画することができます。

 ここではフォントの一覧を、そのフォントを使用して描画する例を紹介します。
1)まず、オーナードローを使用するために、コンボボックスのDrawMode をOwnerDrawFixed に設定します。
2)OwnerDrawFixedに設定した場合は、DrawItemイベントが発生するようになります。このイベント内で描画を行うことでオーナードローが可能になります。
3)DrawItemイベントは、コンボボックスの項目1つを描画するときに1回発生します。引数 System.Windows.Forms.DrawItemEventArgs で現在描画する項目のインデックスをIndexプロパティで取得することができます。
 サンプルではComboBox1.Items.Item(e.Index).ToStringとしてコンボボックスのフォント名を取得して、そのフォントで描画を行っています。

 
サンプル
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ComboBox1.DrawMode = DrawMode.OwnerDrawFixed

    'InstalledFontCollectionオブジェクトの取得
    Dim InstalledFont As New System.Drawing.Text.InstalledFontCollection

    'インストール済みフォントを取得してコンボボックスに表示する
    Dim FontFamilies As FontFamily() = InstalledFont.Families
    For Each f As FontFamily In FontFamilies
        ComboBox1.Items.Add(f.Name)
    Next f
End Sub

Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) _
    Handles ComboBox1.DrawItem

    Dim FontF As FontFamily
    Dim fnt As Font
    Dim fs As FontStyle

    '現在のインデックスのフォントファミリを取得
    FontF = New FontFamily(ComboBox1.Items.Item(e.Index).ToString)

    'フォントによってはFontStyle.Regularをサポートしていない場合があるので
    '描画するフォントのスタイルを取得しておく
    If FontF.IsStyleAvailable(FontStyle.Regular) Then
        fs = FontStyle.Regular
    ElseIf FontF.IsStyleAvailable(FontStyle.Italic) Then
        fs = FontStyle.Italic
    Else
        fs = FontStyle.Bold
    End If

    '取得しておいたフォントスタイルを使用してフォントを作成
    fnt = New Font(FontF, 9, fs)

    '適切な色で背景を描画
    e.DrawBackground()

    e.Graphics.DrawString( _
        ComboBox1.Items.Item(e.Index).ToString, _
        fnt, _
        New SolidBrush(Color.Black), _
        e.Bounds.X, _
        e.Bounds.Y)

    'フォントの破棄
    fnt.Dispose()
    FontF.Dispose()
End Sub
 

<< 前のTips  次のTips >>