パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

C# に挑戦 2

もう一箇所ひっかかったのでメモっておく。
先の記事に書いたように、PictureBox の大きさが、フォームの ClientRectangle より小さくなったときに、フォームの真ん中に PictureBox が表示されるようにするために、PictureBox.Location を変えることにした。逆に PictureBox の方が大きいときは、スクロールされる(仮想的な)領域の一番左上に PictureBox を移動するようにしたい。

ここで引っかかったのは、AutoScroll でスクロールした状態(一番左上以外)のとき、PictureBox の Left と Top を例えば(0, 0)にすると、スクロールして表示されている部分の左上が PictureBox の左上になってしまう。目的としては、スクロールされる全体領域の一番左上を指示したいわけだが、全く違う場所になる可能性がある。場合によっては、PictureBox は右下へどんどん移動していってしまう(左上に余白がどんどん追加されたりする)ことになる。(Left,Top) を (0,0) と指定しても、スクロールされる全体領域の左上では無いからである。

正しくは、
pictureBox.Left = -AutoScrollPosition.X;
pictureBox.Top = -AutoScrollPosition.Y;
が所望の結果を得られる処理である。