2

マウスクリックでポイントを取得して描画するフォームに取り組んでいます。ポイントを正しく描画できるように、スクロールオフセットを適切に取得して追加する方法について混乱しています。たとえば、現在、左上の座標が (0,0) であるポイントを追加すると、ポイントが最初に作成された場所にとどまるのではなく、ポイント自体が再描画され、スクロール アクションで移動します。設定しました

this.AutoScroll = true

最小サイズを手動で設定しました

this.AutoScrollMinsSize = new Size(800,600);

これまでのマウスクリックイベントは次のようになります。

if (e.Button == MouseButtons.Left)
{
  Point newPoint = new Point(e.X, e.Y);
  p.X += this.AutoScrollOffset.X;
  p.Y += this.AutoScrollOffset.Y;
  this.Invalidate();
}

AutoScrollOffset プロパティを使用して、スクロール時にポイントを移動するのではなく、それらが属するポイントを保持する適切な方法は何ですか?

私のプログラムは、Scroll イベントが発生したときに再描画するように Scroll イベントをオーバーライドして、表示領域を離れると描画が消えるという問題を修正することも追加する必要があります。

4

1 に答える 1

2

AutoScrollOffset は、使用する正しいプロパティではありません。ScrollControlIntoView() メソッドを使用すると、スクロール位置にオフセットを適用できます。これは非常にまれで、自分で一度も使用したことがありません。

代わりに AutoScrollPosition プロパティを使用する必要があります。

    if (e.Button == MouseButtons.Left) {
        var newPoint = new Point(e.X - this.AutoScrollPosition.X,
                                 e.Y - this.AutoScrollPosition.Y);
        // etc..
    }

減算が必要であることに注意してください。これは少し直感的ではありません。

于 2013-10-16T19:59:47.163 に答える