VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
<< 前の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 >>