DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

AutoScrollをTrueにしてスクロールバーを表示された時、指定した位置までスクロールする

指定した座標位置までスクロールさせる

フォームのAutoScrollプロパティをTrueにしてスクロールバーを表示させた時、指定した位置までスクロールさせるには、AutoScrollPositionプロパティを使います。

AutoScrollPositionプロパティにスクロール位置を設定する時、スクロールの開始位置からどれだけ離れているかを正の整数で設定します。つまり、垂直スクロールバーでは下に、水平スクロールバーでは右に移動させるほど、大きな値を設定します。ところがAutoScrollPositionプロパティでスクロール位置を取得する時は、逆にスクロールの開始位置からどれだけ離れているかが負の整数で取得できます。例えばAutoScrollPositionプロパティに(100, 200)という位置を設定した後、AutoScrollPositionを取得すると、(-100, -200)となります。

現在の位置から右、下に10ずつスクロールさせるには、次のようにします。

VB.NET
コードを隠すコードを選択
Me.AutoScrollPosition = _
    New Point(-Me.AutoScrollPosition.X + 10, _
        -Me.AutoScrollPosition.Y + 10)
C#
コードを隠すコードを選択
this.AutoScrollPosition =
    new Point(-this.AutoScrollPosition.X + 10,
        -this.AutoScrollPosition.Y + 10);

指定したコントロールが表示されるようにスクロールさせる

また、ScrollControlIntoViewメソッドにより、指定したコントロールが表示されるようにスクロールすることができます。

MSDNではScrollControlIntoViewメソッドについて、「このメンバは、.NET Framework インフラストラクチャのサポートを目的としています。独自に作成したコード内で直接使用することはできません。」とありますが、これは間違いで、問題なく使用できるようです(注)。(.NET Framework 2.0からは、この記述が消えました。)

補足:SB_THUMBPOSITIONやSB_THUMBTRACKメッセージによりスクロールさせる場合は、メッセージを送った後にSetDisplayRectLocationメソッドを呼び出さなければ正常に機能しないケースがあるようです。詳しくは、「microsoft.public.dotnet.framework.windowsforms - Re: scrolling a panel」をご覧ください。
  • 履歴:
  • 2007/1/15 .NET Framework 2.0に関する記述を追加。