タイトル : 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 |