tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: はじめまして
投稿日: 2006/05/29(Mon) 00:32
投稿者YAS
>If e.X <= Panel2.Location.X Then
>If e.Y <= Panel2.Location.Y Then

上,左に動かないのは上の条件が間違っているからです。
e.XはPictureBox1のクライアント領域の座標を返します。しかし,PictureBox1はスクロールしています
ので,単純にIf e.X <=0 then としても動きません。e.Xをスクリーン座標に変換して,さらにパネルの
クライアント座標に変換して比較する必要があると思います。

単に画像をスクロールさせるだけなら以下のような方法もあると思います。
コピー&ペーストで動作します。参考にしてください。

Public Class Form1

    Dim img As New Bitmap("c:\xxxxxx.JPG")
    Dim offset As New Point
    Dim WithEvents ExPanel1 As New ExPanel

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
        Me.ExPanel1.Location = New Point(10, 10)
        Me.ExPanel1.Size = New Size(Me.ClientSize.Width - 20, Me.ClientSize.Height - 20)
        Me.Controls.Add(Me.ExPanel1)
        Dim g As Graphics = Graphics.FromImage(img)
    End Sub

    Private Sub Panel1_MouseMove(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles ExPanel1.MouseMove
        If e.Button <> Windows.Forms.MouseButtons.Left Then Return
        If e.X > Me.ExPanel1.Width Then offset.X += 50
        If e.X < 0 Then offset.X -= 50
        If e.Y > Me.ExPanel1.Height Then offset.Y += 50
        If e.Y < 0 Then offset.Y -= 50
        Me.ExPanel1.Refresh()
    End Sub

    Private Sub Panel1_Paint(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.PaintEventArgs) Handles ExPanel1.Paint
        e.Graphics.TranslateTransform(-offset.X, -offset.Y)
        e.Graphics.DrawImage(img, 0, 0)
    End Sub

End Class

Public Class ExPanel
    Inherits Panel
    Public Sub New()
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    End Sub
End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。