投稿者 hori  (社会人) 投稿日時 2009/12/3 18:10:09
るきおさんにおしえてもらったのを若干手を加えたのですが、(といってもほとんどおなじかもしれません)どうしても理解できない部分があるのでご教授願います。

画像を読み込んで、その画像を拡大、縮小、及び移動はできますが、画像を最大に拡大してしまった
ときに、マウスの形状が変化しなくなってしまいます。
また、他の画像を読み込んだときに、それ以前に読み込まれていた画像と同じサイズになってしまいます
(これは初期化が必要なのだと思いますが、)





 Private IsSizable As Boolean    'サイズ変更可能状態か? 
    Private IsSizing As Boolean     'サイズ変更中か? 

    Dim sx As Integer, sy As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        OpenFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + "   ビットマップ(*.bmp)|*.bmp"


        Dim fname As String = ""
        OpenFileDialog1.Filter = "jpeg(*.jpg,*.jpg)|*.jpg;*.jpg|" + "   ビットマップ(*.bmp)|*.bmp"
        'ファイルを開くダイアログボックス
        If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

            'ファイル名を取得
            fname = OpenFileDialog1.FileName
            '読み込み
            PictureBox1.Image = Image.FromFile(fname)
        End If
      

    End Sub

    Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        sx = e.X
        sy = e.Y
        'サイズ変更可能状態でマウスを押下した場合、サイズ変更中にする。 
        If IsSizable Then
            IsSizing = True
        End If
    End Sub

    Private Sub PictureBox1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseLeave

        'マウスがPictureBox外に出たときはカーソルを通常にして、フラグをすべてリセットする。 
        Me.Cursor = Cursors.Default
        IsSizable = False
        IsSizing = False

    End Sub


  
    Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
       
        If IsSizing Then
            'サイズ変更中ならサイズを変更する 
            PictureBox1.Width = e.X
           
        Else
            'サイズ変更中でないならサイズ変更可能状態か判断しマウスの形状を変更する。 
            ArrowMouse(sender, e.X, e.Y)
            If e.Button = Windows.Forms.MouseButtons.Left Then
                Dim mx As Integer = PictureBox1.Left + e.X - sx
                Dim my As Integer = PictureBox1.Top + e.Y - sy
                PictureBox1.Location = New Point(mx, my)
            End If
        End If
    End Sub

    ''' <summary> 
    ''' サイズ変更可能状態か判断し、必要に応じてマウスの形状を変更する。 
    ''' MouseLeaveイベントでもマウスの状態を変更しているのに留意のこと。 
    ''' </summary> 
    Private Sub ArrowMouse(ByVal cnt As Control, ByVal x As Integer, ByVal y As Integer)

        If x >= (cnt.Width - 5) Then
            'コントロールの右端から内側に5ピクセル内にマウスがあるときサイズ変更可能 
            Me.Cursor = Cursors.SizeNWSE
            IsSizable = True
        Else
            'それ以外のときサイズ変更不可。 
            Me.Cursor = Cursors.Default
            IsSizable = False
        End If

    End Sub