none
PanelのAutoScrollがTrueのとき座標がおかしい RRS feed

  • 質問

  • PanelのAutoScrollがTrueのときは画面に入りきらないコントロールがあるとき

    スクロールバーが表示されますが、このスクロールバーでスクロールしたときに

    コントロールのtopやleftの数値を変更して場所を移動すると、意図した場所とは違った場所に移動してしまいます

    スクロール後のPanelの左上が Top=0 Left=0 ということで移動をしているように見えますが、

    スクロール前の状態を基準にしてコントロールを移動する方法はありませんか?

    スクロールバーを 0,0に戻して移動するとうまくいくようですが、スクロール量を変更せずに移動させたいです

     

    2007年8月31日 16:00

回答

  • .NET Frameworkが 1.0や1.1なら Panel1.AutoScrollPotitionを参照してオフセットを算出

    2.0なら Panel1.HorizontalScroll.Value/Panel1.VerticalScroll.Valueから算出できますよ

     

    以下は テキストボックスを2つ貼って それぞれにPictureBox1のLeft/Topを設定 ボタンのクリックで移動

    Code Snippet

        ' 古いタイプなら

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim pt As New Point(TextBox1.Text, TextBox2.Text)
            pt.Offset(Panel1.AutoScrollPosition.X, Panel1.AutoScrollPosition.Y)
            PictureBox1.Location = pt
        End Sub

       ' v2.0なら
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim pt As New Point(TextBox1.Text, TextBox2.Text)
            pt.Offset(-Panel1.HorizontalScroll.Value, -Panel1.VerticalScroll.Value)
            PictureBox1.Location = pt
        End Sub

     

    2007年9月2日 1:28

すべての返信

  • .NET Frameworkが 1.0や1.1なら Panel1.AutoScrollPotitionを参照してオフセットを算出

    2.0なら Panel1.HorizontalScroll.Value/Panel1.VerticalScroll.Valueから算出できますよ

     

    以下は テキストボックスを2つ貼って それぞれにPictureBox1のLeft/Topを設定 ボタンのクリックで移動

    Code Snippet

        ' 古いタイプなら

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim pt As New Point(TextBox1.Text, TextBox2.Text)
            pt.Offset(Panel1.AutoScrollPosition.X, Panel1.AutoScrollPosition.Y)
            PictureBox1.Location = pt
        End Sub

       ' v2.0なら
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim pt As New Point(TextBox1.Text, TextBox2.Text)
            pt.Offset(-Panel1.HorizontalScroll.Value, -Panel1.VerticalScroll.Value)
            PictureBox1.Location = pt
        End Sub

     

    2007年9月2日 1:28
  • ありがとうございます

    期待通りの処理を得ることができました

    2007年9月3日 2:22