DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ListBoxのOwnerDrawで横スクロールができなくなる

環境/言語:[Win 7 SP1 / VS 2010 C# / .NET 4.0]
分類:[.NET]

ListBoxの選択行をハイライト表示させないためOwnerDrawさせようと
しましたが、横スクロールができなくなってしまいました。

ListBoxの幅を超える分の文字列をlistBox1.Items.Add(msg)で追加して
やっても、スクロールバーの領域は描画されるものの、スライダーや
←→がボタン化しないため、スクロール操作ができません。
(DrawMode=Normalだとちゃんと横スクロールできます)
縦スクロールは問題なく動作するのですが。

セットしているプロパティは以下の通りです。
・DrawMode = OwnerDrawFixed
・HorizontalScrollbar = true
・ScrollAlwaysVisible = true

DrawItemのコードは以下の通りです。
private void listBox1_DrawItem(object sender, DrawItemEventArgs e) {
// 選択行を強調表示しない
if (e.Index > -1) {
// 描画する文字列の取得
string txt = ((ListBox)sender).Items[e.Index].ToString();
// 文字列の描画
e.Graphics.DrawString(txt, e.Font, Brushes.Black, e.Bounds);
}
}

DrawItemEventArgsのプロパティやメソッドには該当するものが
ないようですが、何か方法はあるのでしょうか。

以上よろしくお願いいたします。
■No31604に返信(Xn68000さんの記事)
> ListBoxの選択行をハイライト表示させないためOwnerDrawさせようと
> しましたが、横スクロールができなくなってしまいました。

HorizontalExtent プロパティを、最大長のテキストに合わせてください。


> string txt = ((ListBox)sender).Items[e.Index].ToString();

ToString メソッドではなく、GetItemText を利用してください。

ToString を使う方法だと、DataSource + DisplayMember での
データバインド時に対応できません。
魔界の仮面弁士さん ありがとうございました。

ご教授いただいた方法で実現できました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板