ComboBox の行の高さを変更する
最近更新が止まってますが、ネタはあっても書く暇のない日が続く今日この頃です。
本日は、以前 Yahoo のブログで書いた記事を、少し修正して公開したいと思います。
.NET の ComboBox は、標準の仕様だと行間がなくて大変見づらて仕方ありません。
そこで行の高さを ItemHeight プロパティで設定しようとするのですが、規定値(この場合 12)から変更出来ません。どうやら DrowMode プロパティが Normal のままだと ItemHeight の値は変更できないようです。
しかしオーナードローを有効にするとアイテムが表示されなくなるため、アイテムを描画するのにかなり面倒な処理が必要になります。
そこでオーナードローを使わずに ItemHeight を変更するために、SendMessage を使い CB_SETITEMHEIGHT メッセージをコンボボックスに投げてやります。この方法が一番簡単だと思います。
SendMessage(comboBox1.Handle, CB_SETITEMHEIGHT, 0, 30);
以下、C# の例です。とりあえず高さを30ピクセルに設定してみました。
using System.Runtime.InteropServices; ・・・・・・ [DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); private const int CB_SETITEMHEIGHT = 0x153; private void Form1_Load(object sender, EventArgs e) { SendMessage(comboBox1.Handle, CB_SETITEMHEIGHT, 0, 30); }
VB.NET だとこうなります。
Imports System.Runtime.InteropServices ・・・・・・ <DllImport("user32.dll")> _ Private Shared Function SendMessage _ (ByVal hWnd As IntPtr, ByVal Msg As Integer, _ ByVal wParam As Integer, ByVal lParam As Integer) As Integer End Function Private Const CB_SETITEMHEIGHT As Integer = &H153 Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load SendMessage(Me.ComboBox1.Handle, CB_SETITEMHEIGHT, 0, 30) End Sub