VB.NET AutoScrollPositionを設定してもスクロールバーの位置がズレる

VB.NETで、とあるフォームにスクロールバーを設置。
スクロールバーを動かした後、他のウインドウを前面にして、再びフォームを前面にすると、スクロールバーの位置が(0,0)に戻っているという現象が発生。

Form1_Deactivate メソッドで Me.AutoScrollPosition.X と Me.AutoScrollPosition.Y を取得しておき、
Form1_Activated メソッドでその値をセットするコードを実装していたのだが上手くいかない。
スクロールバーが(0, 0)の位置に戻ってしまう。

■修正前

Private scrollX
Private scrollY

Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
  Me.AutoScrollPosition = New Point(scrollX, scrollY)

End Sub

Private Sub Form1_Deactivate(sender As Object, e As EventArgs) Handles MyBase.Deactivate
  scrollX = Me.AutoScrollPosition.X
  scrollY = Me.AutoScrollPosition.Y

End Sub



調べてみたら、
AutoScrollPosition.XとAutoScrollPosition.Xで得られる値は負
AutoScrollPosition = New Point(X, Y)で設定する値は正
ということらしい。

■修正後

Private scrollX
Private scrollY

Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
  Me.AutoScrollPosition = New Point(-scrollX, -scrollY)

End Sub

Private Sub Form1_Deactivate(sender As Object, e As EventArgs) Handles MyBase.Deactivate
  scrollX = Me.AutoScrollPosition.X
  scrollY = Me.AutoScrollPosition.Y

End Sub



これで何とかスクロール位置を維持できた。



posted by へっぽ at 01:00 | TrackBack(0) | VB.NET | このブログの読者になる | 更新情報をチェックする

この記事へのトラックバック