(14) VB2003:ScrollBarのValueがMaximumまで届かない
検証環境 自作ATX(PenIII1.2GHz/GA-6VTXE/512MB)
WinXPPro(2002)SP2/VS.NET2003(7.1.3091) & .NET Framework1.1(1.1.4322SP1)/MSDN-Lib Oct,2004
って、あれ?これって元々そぅでしたっけ?
ちょっとウチに帰ってVB6と見くらべないばわかんないなぁ。
ってことでちょっと保留。
確認してみました。よし、VB6では正常にMaximumまでスクロールできますので、やっぱりVB.NET固有の現象ですね。
例えば100件のデータに対し10行表示の表をTextBoxかなんかで自力で作ってVScrollBarを配置したとしましょう。
この場合、一番下までスクロールさせた時に表示されるデータは91~100行目。
スクロールバーはMinimum=1、Maximum=100、一度に10行表示されるのでLargeChenge=10とした場合。
VB.NETにおいては、このスクロールバーが取り得る値は1~91(Maximum-LargeChange+1)となります。
つまり常にスクロールバーの値から始めて10行分のデータを取り出せばいい、といぅこととなります。
VB6の場合は、LargeChangeはスクロールボックス以外をクリックした時の移動量のみを意味し、Valueの取り得る値はLargeChangeに関わらずMin~Maxです。 つまり上記の例であれば、Maxには自力で(データ数-LargeChange+1)を格納してやる必要があります。
まぁ単純に仕様の違いと言えばそれまでですが、こーいぅなにげなところでびみょーにいろいろ違うので旧VBの常識をそのまま持ち込んで是とするのではなく常に「どぅ違うのか?」と念頭に置いておく必要があるよ、といぅ好例ですね。
もっとも正確には「仕様が変わった」のではなく、VBと無関係なところでCLSとして策定された仕様がたまたま旧VBとは異なっている、といぅことではあるんですが。
理屈としては、VB.NETの方がデータ数や表の状態とシンクロした値をセットできるのでプロパティの意味合いとしてはすっきりします。
とは言えVB6でもMaxの値に気を付ければ済む話ですね。
要はValueとMaximum(Max)・LargeChangeの関係が変わっているので、VB6からの移行組はびっくりするな、といぅこととなります。