トップ回答者
Scrollbleコントロールの挙動が変

質問
-
VartivalScrollbar.LargeChange = 120;
AutoScrollMinSize = new Point(1000,2016);
とし、OnScrollイベント内でAutoScrollPostion.Yの値を取得したのですが、いくらスクロールさせても、0~-1809までの範囲内でしか動きません(Scrollbleコントロールの幅と高さはそれぞれ300,207です)MSDNのScrollBarクラスによると、Valueの値は0~Maxium - LargeChange + 1までをとると書いてあるので、2016-120+1まで動いてもいいはずなのですが・・・
もしかして、Scrollbleコントロールの場合はScrollBarクラスのそれと違うのでしょうか?
none- 編集済み ferio 2010年5月20日 2:16 コピペする範囲を間違えてしまいました
回答
-
ああ、LargeChange って ScrollableControl.VerticalScroll.LargeChange のことですか。
んーとですね、AutoScrollPosition は、「いま表示されている画面の左上の座標」なんですよ。で、ScrollableControl の「いま表示されている画面」は、ClientSize の大きさです。画面の一番下が 2016 で、いま表示されている画面の高さが 200 なら当然「いま表示されている画面の左上の座標」は 1817 になりますよね?
ScrollableControl.VerticalScroll.LargeChange は、ページを繰る=一画面スクロールする際の変化量であって、AutoScrollPosition に影響する物ではありません。
- 回答としてマーク ferio 2010年5月20日 7:44
すべての返信
-
ああ、LargeChange って ScrollableControl.VerticalScroll.LargeChange のことですか。
んーとですね、AutoScrollPosition は、「いま表示されている画面の左上の座標」なんですよ。で、ScrollableControl の「いま表示されている画面」は、ClientSize の大きさです。画面の一番下が 2016 で、いま表示されている画面の高さが 200 なら当然「いま表示されている画面の左上の座標」は 1817 になりますよね?
ScrollableControl.VerticalScroll.LargeChange は、ページを繰る=一画面スクロールする際の変化量であって、AutoScrollPosition に影響する物ではありません。
- 回答としてマーク ferio 2010年5月20日 7:44
-
解決となっていますが、疑問が残っているようなので、横から失礼します。
Hongliangさんの回答の繰り返しになってしまう部分もありますが、
ScrollableControl.AutoScrollPositionは「いま表示されている画面の左上の座標」(Hongliangさんの回答より)で、「表示されている画面」のサイズを認識して算出された値です。
ScrollBar.Valueは「スクロール ボックスの現在位置」(MSDNより)となっており、スクロール対象に関係なく出てくる値です。LargeChangeが反映されないように感じているようですが、そもそもこれは移動量を指定するものです。
移動した結果の、「画面左上」と「スクロール位置」は画面サイズを考慮すれば違う値になって当然だと思います。ferioさんの最初の投稿から察するに、
ScrollableControl.AutoScrollPosition = ScrollBar.Value
と勘違いされているのではないでしょうか?なお、ScrollBar.ValueをScrollableControlから得るには、
ScrollableControl.VerticalScroll.Value
または
ScrollableControl.HorizontalScroll.Value
あたりで取れないでしょうか?(未確認です)