把HScroll、VScroll控件放置到窗体的下侧、右侧
再在Change、Scroll事件中修改PictureBox的坐标

解决方案 »

  1.   

    把HScroll、VScroll控件放置到窗体的下侧、右侧Private Sub HScroll1_Change()
    Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
    End SubPrivate Sub VScroll1_Change()
    Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
    End Sub
      

  2.   

    用两个picturebox,把要显示图片的picturebox放在另一个picturebox中。把HScroll,VScroll分别放在作为容器的PictureBox的下侧和右侧。其它同上
      

  3.   

    做一些补充,我觉得可以先对图片的大小和picturebox的大小做一个比较,再决定
    hscroll和vscroll的visible 属性,这样,当图片小于框时可以让滚动条隐藏,更美观,当然,这适合大小变化的不同图片。
      

  4.   

    Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
    Private Const SB_HORZ = 0
    Private Const SB_VERT = 1
    Private Const SB_BOTH = 3
    Private Sub Form_Load()    ShowScrollBar picture1.hwnd, SB_BOTH, True
    End Sub
      

  5.   

    我加
    Private Sub HScroll1_Change()
    Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
    End SubPrivate Sub VScroll1_Change()
    Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
    End Sub
    语句后,出现overflow错误,为何?我希望picturebox不动,里面内容在动!
      

  6.   

    Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
    Private Const SB_HORZ = 0
    Private Const SB_VERT = 1
    Private Const SB_BOTH = 3
    Private Sub Form_Load()    ShowScrollBar picture1.hwnd, SB_BOTH, True
    End Sub
    加后滚动条拉不动?
    是否还要加语句?
      

  7.   

    还事用两个picturebox吧
    一个放在另一个的里面
    里面一个autosize=true
    外面一个autosize=false
    给你写一个,等会给你贴
      

  8.   

    以下是一个比较完整的代码,包括移动图片的功能。
    其中使用了一个TOOLBAR,标记为TOOLBAR1,纵向鼓动条:VScroll;横向滚动条:HScroll,一个PictureBox:PicBack;一个PictureBox:PicMap,其父对象是PicBack;打印时可用多种方法Option ExplicitDim MoveFlg As Boolean
    Private Type MoveXY
        X As Single
        Y As Single
    End Type
    Dim PicMapMoveXY As MoveXYPrivate Sub Form_Load()    MoveFlg = False
    End SubPrivate Sub Form_Resize()    On Error Resume Next
       
        PicBack.Top = Toolbar.Top + Toolbar.Height + 40
        PicBack.Left = 0
        PicBack.Width = Me.ScaleWidth
        PicBack.Height = Me.ScaleHeight - Toolbar.Top - Toolbar.Height - StatusBar1.Height - 80End SubPublic Sub LoadPicMapInfo(PicMap As PictureBox, NENO As String)
            
        PicMap.Cls
        
        PicMap.Top = 0
        PicMap.Left = 0
        PicMap.Width = ???
        PicMap.Height = ???
        '''
    End Sub
    Private Sub PicBack_Resize()
        ImgMap.Top = 0
        ImgMap.Left = 0
        ScrolResize
    End SubSub ScrolResize()
        On Error Resume Next
        VScroll.Top = 0
        VScroll.Left = PicBack.ScaleWidth - VScroll.Width
        VScroll.Height = PicBack.ScaleHeight - IIf(HScroll.Visible, HScroll.Height, 0)
        
        HScroll.Left = 0
        HScroll.Top = PicBack.ScaleHeight - HScroll.Height
        HScroll.Width = PicBack.ScaleWidth - 0
        
        PicMap.Top = IIf((PicMap.Height - PicBack.ScaleHeight) > 0, 0, (-PicMap.Height + PicBack.ScaleHeight) / 2)
        PicMap.Left = IIf((PicMap.Width - PicBack.ScaleWidth) > 0, 0, (-PicMap.Width + PicBack.ScaleWidth) / 2)
            
        HScroll.Visible = PicMap.Width > PicBack.ScaleWidth
        VScroll.Visible = PicMap.Height > PicBack.ScaleHeight
        
        HScroll.Max = IIf((PicMap.Width - PicBack.ScaleWidth) > 0, (PicMap.Width - PicBack.ScaleWidth), 500)
        VScroll.Max = IIf((PicMap.Height - PicBack.ScaleHeight) > 0, (PicMap.Height - PicBack.ScaleHeight), 500)
        HScroll.Value = 0
        VScroll.Value = 0End SubPrivate Sub PicMap_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        PicMapMoveXY.X = X
        PicMapMoveXY.Y = Y
    End SubPrivate Sub PicMap_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim CurPtInCSRegion As Boolean, i As Integer
        If MoveFlg And Button = 1 Then
            If (PicMap.Top + Y - PicMapMoveXY.Y > 1000) Or (PicMap.Top + Y - PicMapMoveXY.Y < -PicMap.Height + PicBack.Height - 1000) Then
    '            Exit Sub
            Else
                PicMap.Top = PicMap.Top + Y - PicMapMoveXY.Y
            End If
            If (PicMap.Left + X - PicMapMoveXY.X > 1000) Or (PicMap.Left + X - PicMapMoveXY.X < -PicMap.Width + PicBack.Width - 1000) Then
    '            Exit Sub
            Else
                PicMap.Left = PicMap.Left + X - PicMapMoveXY.X
            End If
                    
            On Error Resume Next
            VScroll.Value = -PicMap.Top
            HScroll.Value = -PicMap.Left
        End If
        
    End SubPublic Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)
        Select Case Button.Key
            Case "ANU"
            Case "Refresh"
                '''
                
                ScrolResize
            Case "Pan"
                If Button.Value = tbrPressed Then
                    PicMap.MousePointer = 15
                    MoveFlg = True
                Else
                    PicMap.MousePointer = 0
                    MoveFlg = False
                End If
            Case "Print"
            
        End Select
            
    End Sub
    Private Sub VScroll_Change()
        PicMap.Top = -VScroll.Value
    End SubPrivate Sub HScroll_Change()
        PicMap.Left = -HScroll.Value
    End Sub
      

  9.   

    Private Sub Form_Load()
     Form1.ScaleMode = 3
     Picture1.ScaleMode = 3
     Picture1.ScaleMode = 3
     Picture1.Appearance = 0
     Picture2.Appearance = 0
     Picture2.AutoSize = True
     Picture1.AutoSize = False
     Picture2.Left = 0
     Picture2.Top = 0
     'Picture1.Move 0, 0, Form1.Width, Form1.Height '如果想让整个窗体是picture1,加了这句还要处理picture1_risize事件
     HScroll1.Min = 0
     VScroll1.Min = 0
     VScroll1.Left = Picture1.ScaleWidth - VScroll1.Width
     VScroll1.Top = 0
     VScroll1.Height = Picture1.ScaleHeight - HScroll1.Height
     HScroll1.Left = 0
     HScroll1.Top = Picture1.ScaleHeight - HScroll1.Height
     HScroll1.Width = Picture1.ScaleWidth - VScroll1.Width
     HScroll1.Visible = False
     VScroll1.Visible = False
     Picture2_Resize '如果用loadpicture就不用加这句了
    End Sub
    Private Sub HScroll1_Change()
      Picture2.Left = -HScroll1.Value
    End Sub
    Private Sub Picture2_Resize()
     If Picture2.Width > Picture1.Width Then
      HScroll1.Visible = True
      HScroll1.Max = Picture2.Width - Picture1.Width
     End If
     If Picture2.Height > Picture1.Height Then
      VScroll1.Visible = True
      VScroll1.Max = Picture2.Height - Picture1.Height
     End If
    End SubPrivate Sub VScroll1_Change()
      Picture2.Top = -VScroll1.Value
    End Sub
      

  10.   

    vscroll1,hscroll1放到picture1 里
    picture1是外面的图片框
      

  11.   

    VScroll、HScroll的父对象是PicBack
      

  12.   

    用了ShowScrollBar后
    必须子类拦截PictureBox的消息
    响应WM_HSCROLL、WM_VSCROLL消息
      

  13.   

    PictureBox变化后修改滚动条的值