ListBoxのスクロール
今回、情報出力用のListBoxだけを持ったFormを作成し、
出力ウィンドウとして使用している。
特に選択する必要もないので、SelectionMode=Noneにしてある。
ListBox->Items->Addで文字列を追加していくことになるのだが、
表示行数がフォームの高さを超えた場合、垂直スクロールバーが表示され、
新しい文字列はそのまま下方に隠れてしまう。
本来の目的であれば、古い文字列が流れ、新しい文字列が常に表示されて欲しいのだが、
その設定についてあれやこれやとてこずったのでメモを。
まずSelectedIndexを変更する方法を試したが、
SelectionMode==Noneの場合は例外が発生してしまう。
苦肉の策で一時的にSelectionMode==Oneとかに設定したのだが、
特にスクロールされる様子は無し。つまり、SelectedIndexプロパティの変更は
スクロールには影響しないということだろうか…。
次にTopIndexプロパティを試してみたが、これは上手くいった。
これはクライアント上の一番最初の行に表示するアイテムのインデックスを設定するプロパティ。
追加するたびにListBox->Items->Count-1をセットしてやることで、
最新追加文字列が常に表示されるようになる。
ちなみにListBox->Items->Count-1をセットしたからと言って、
TopIndexプロパティの値がそのまま指定した値に変更されるわけではない。
例えば4行表示できるListBoxの場合、最新の文字列が8行目だったらTopindex=5となり、
5~8行目が表示されるようになる。
つまり、指定行が最後尾だったりすると、それが含まれつつ、なるべく下に表示するような
値に自動的にセットしてくれるっぽい。
セッターの中で宜しくやってくれているのだろう。
最終更新:2008年12月25日 16:39