孝信2005/08/26「TIPS:ListBoxコントロールのオーナー描画(高さ固定)により画像を一覧表示するには?」に対し、本稿ではListBoxコントロールのオーナー描画により、任意の高さで項目を描画する方法について解説する。次の画面は、高さの異なる画像を項目として表示しているリストボックスの例である。高さ可変のオーナー描画によりリストボックスに画像を表示するサンプル・アプリケーションの実行画面ボタンをクリックすることにより、特定のディレクトリに格納されているJPEG画像を一覧表示する。画面は上から2番目の項目を選択しているところ。1番目の項目とは高さが異なっている。ListBoxコントロールのプロパティ設定ListBoxコントロールで高さ可変のオーナー描画を利用するには、DrawModeプロパティにDrawMode.OwnerDrawVariable(System.Windows.Forms名前空間のDrawMode列挙体の値)を設定する。この設定により、ListBoxコントロールでは各項目の描画に関して次の2つのイベントが発生するようになる。後者のDrawItemイベントに関しては前掲のTIPSで解説済みだ。ここではMeasureItemイベントに関して解説する。項目の描画に先立って発生するMeasureItemイベントMeasureItemイベント(measureは「測る」という意味)は、項目描画のためのDrawItemイベントの前に発生する。このイベントのイベント・ハンドラとなるメソッドでは、これから描画しようとしている項目の高さをセットする。具体的には、メソッドのパラメータとして渡されるMeasureItemEventArgsクラス(System.Windows.Forms名前空間)のオブジェクトのItemHeightプロパティに設定すればよい。対象となっている項目については、同オブジェクトのIndexプロパティから、そのインデックス番号を取得することができる。高さ可変のオーナー描画であっても、1つの項目の高さは255ピクセルを超えることはできないので注意が必要である*(256以上の値をItemHeightプロパティに設定した場合には、その値を256で割ったときの余りが設定されるようである)。日本語のリファレンス・マニュアルには記載されていないが、英語版には明記されている。高さ可変のオーナー描画によりリストボックスに画像を表示するサンプル・アプリケーション以下に、冒頭で示したサンプル・アプリケーションのコードを示す。.NETでWindowsアプリケーションを新規作成し、ListBoxコントロールとButtonコントロールをフォームに配置しておく必要がある。配置したButtonコントロールのClickイベント、ListBoxコントロールのDrawItemイベントとMeasureItemイベントの各イベント・ハンドラとして、リスト内の3つのメソッドをそのコメントに従って指定しておく。Sub高さ可変のオーナー描画によりリストボックスに画像を表示するコード(上:C#、下:VB.NET)このコードでは、画像の追加時にリストボックスのサイズに合わせたサムネイル画像を作成しておき、それをリストボックスの項目として追加している。DrawItemイベント・ハンドラでは、対象となる画像を取り出し、その画像の高さを項目の高さとして設定している。DrawItemイベント・ハンドラ以外のコードに関しては前掲のTIPSで掲載しているコードとほぼ同じなので、詳しくはそちらを参照してほしい。より自動抽出したものです。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。