2005年02月09日

ListBox

   このエントリーをはてなブックマークに追加 Clip to Evernote
ListBoxに文字列をAddして行くときに、自動でスクロールしてほしい時が時々あります。
例えば、表示領域が10行分だったとして、11行目以降を Add した場合には、自動でスクロールしてくれないと、ちょっと寂しい思いをする時があります。最後にAddした文字列が、見える状態になっていてほしいということですね。
これを自動で制御してくれるプロパティが有ればいいんだけど、どうも無い見たいです。

これを実現するには、TopIndexプロパティを使い、最初に表示される項目のインデックスを設定すればOKです。
listBox1.Items.Add(s);
if ( listBox1.Height < listBox1.PreferredHeight ) {
listBox1.TopIndex =
listBox1.Items.Count - listBox1.Height/listBox1.ItemHeight;
}

まあ、上のように書けば良いのですが、実は、この if 文は不要です。
この if 文が無いと、TopIndex にマイナスの値が設定されてしまう可能性がありますが、TopIndexは、マイナス値が設定されると、無視してくれます。
ただ、これは、明確に、.NET Framework のHELP記載されているわけではありません。

ListBoxを実装する側の立場だと、例外を発生させることも出来るわけですが、そうしていないのは、プログラマの利便性を考えているからなのでしょう。そう考えると、if 文は不要という結論になりますが、一方、いやいや、ドキュメントに明確に書かれていない仕様を前提にプログラムを作ってはいけないという、鉄則もまた真なりということで、if 文を書いた方がよいのか、書かなくてもよいのか、というつまらないことで、悩んでしまいます。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/13958819