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 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 >>