AutoScrollPosition

昨日見つけたバグの修正編です。修正の前にスクロール周りを調べて分かった注意点などを。

AutoScrollを使う際、コンテナに載せるコントロールの位置に注意が必要です。
ScrollableControlから派生したコンテナになるコントロールは、主にForm、Panel、UserControlやその派生があります。これらにコントロールを載せたり、直接描画する際の位置は、AutoScrollPositionプロパティのx座標とy座標を加える必要があります。

以下、コントロールを載せる場合の例で説明します。
Control.Locationに (0, 0) を指定すると、今画面に見えている部分の左上隅に配置されます。もし、スクロールされて広い領域のうちの一部分だけがクリッピングされた状態だと、この(0, 0)はどこを指すでしょうか。(0, 0)が指すのは、今見えているクリップされた領域の左上隅を指します。
クリップされていない全体の一番左上隅を指すには、AutoScrollPositionの値を足してやればOKです。(0, 0) + AutoScrollPositionです。

このAutoScrollPosition、なかなか曲者ですねぇ。
もうちょっと説明が必要かも?という場合は、詳しくはこちらで。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsscrollablecontrolclassautoscrollpositiontopic.asp