ComboBoxのDropDownStyleがSimple以外の場合、ComboBoxの高さは、HeightやIntegralHeightプロパティの値を変えても変わりません。
ComboBoxの高さを変えるには、ComboBoxをオーナードローする必要があります。ComboBoxのオーナードローについては、「コンボボックスの項目を自分で描画する」で紹介しています。
以下にサンプルを示します。ここではComboBox1の項目の高さ(ItemHeightプロパティ)を20としています。
'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'オーナードローを指定 ComboBox1.DrawMode = DrawMode.OwnerDrawFixed '項目の高さを設定 ComboBox1.ItemHeight = 20 'DrawItemイベントハンドラの追加 AddHandler ComboBox1.DrawItem, AddressOf ComboBox1_DrawItem 'ComboBox1のリストに項目を追加する ComboBox1.Items.Add("おはよう。") ComboBox1.Items.Add("こんにちは。") ComboBox1.Items.Add("こんばんは。") End Sub 'DrawItemイベントハンドラ '項目を描画する Private Sub ComboBox1_DrawItem(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DrawItemEventArgs) '背景を描画する '項目が選択されている時は強調表示される e.DrawBackground() Dim cmb As ComboBox = CType(sender, ComboBox) '項目に表示する文字列 Dim txt As String If (e.Index > -1) Then txt = cmb.Items(e.Index).ToString() Else txt = cmb.Text End If '使用するブラシ Dim b As Brush = New SolidBrush(e.ForeColor) '文字列を描画する Dim ym As Single = (e.Bounds.Height - _ e.Graphics.MeasureString(txt, cmb.Font).Height) / 2 e.Graphics.DrawString(txt, cmb.Font, b, _ e.Bounds.X, e.Bounds.Y + ym) b.Dispose() 'フォーカスを示す四角形を描画 e.DrawFocusRectangle() End Sub
//Form1のLoadイベントハンドラ private void Form1_Load(object sender, System.EventArgs e) { //オーナードローを指定 ComboBox1.DrawMode = DrawMode.OwnerDrawFixed; //項目の高さを設定 ComboBox1.ItemHeight = 20; //DrawItemイベントハンドラの追加 ComboBox1.DrawItem += new DrawItemEventHandler(ComboBox1_DrawItem); //ComboBox1のリストに項目を追加する ComboBox1.Items.Add("おはよう。"); ComboBox1.Items.Add("こんにちは。"); ComboBox1.Items.Add("こんばんは。"); } //DrawItemイベントハンドラ //項目を描画する private void ComboBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { //背景を描画する //項目が選択されている時は強調表示される e.DrawBackground(); ComboBox cmb = (ComboBox) sender; //項目に表示する文字列 string txt = e.Index > -1 ? cmb.Items[e.Index].ToString() : cmb.Text; //使用するブラシ Brush b = new SolidBrush(e.ForeColor); //文字列を描画する float ym = (e.Bounds.Height - e.Graphics.MeasureString( txt, cmb.Font).Height) / 2; e.Graphics.DrawString( txt, cmb.Font, b, e.Bounds.X, e.Bounds.Y + ym); b.Dispose(); //フォーカスを示す四角形を描画 e.DrawFocusRectangle(); }
(この記事は、「.NETプログラミング研究 第51号」で紹介したものを基にしています。)