HIRO's.NET

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

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

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

HIRO's.NET RSSHIRO's.NET RSS


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

HOME > C# 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 void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DrawMode = DrawMode.OwnerDrawFixed;

    //InstalledFontCollectionオブジェクトの取得
    System.Drawing.Text.InstalledFontCollection InstalledFont = 
        new System.Drawing.Text.InstalledFontCollection();

    //インストール済みフォントを取得してコンボボックスに表示する
    FontFamily[] FontFamilies = InstalledFont.Families;

    foreach ( FontFamily f in FontFamilies )
        comboBox1.Items.Add(f.Name);
}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    FontFamily FontF;
    Font fnt;
    FontStyle fs;

    //現在のインデックスのフォントファミリを取得
    FontF = new FontFamily(comboBox1.Items[e.Index].ToString());

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

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

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

    e.Graphics.DrawString(
        comboBox1.Items[e.Index].ToString(),
        fnt,
        new SolidBrush(Color.Black),
        e.Bounds.X,
        e.Bounds.Y);

    //フォントの破棄
    fnt.Dispose();
    FontF.Dispose();
}
 

<< 前のTips  次のTips >>