我放图片的PictureBox只有一小部分空间,所以有的图片部分
显示不出来,我想让它上面竖的和横的滚动条, 不知道怎么实现.
也没有找到资料.

解决方案 »

  1.   

    把显示图片的PictureBox放在另一个PictureBox中,然后在外面的PictureBox中加上滚动条控件,通过滚动条控件控制里面的PictureBox的位置
      

  2.   


    1、 使用两个PICTUREBOX,就象Random(随便)所说的那样2、放置两个控件在最外面的PICTUREBOX旁,他们是HScrollBar(水平滚动条) 和 VScrollBar(垂直滚动条)3、以下是一个示例代码,看看对你有没有帮助Private Sub VScroll1_Change()
        Call Move_Picture
    End SubPrivate Sub HScroll1_Change()
        Call Move_Picture
    End SubPrivate Sub Move_Picture()
        On Error GoTo Move_Picture_Error
        Dim x As StdPicture
        Dim w As Long, h As Long
        Set x = LoadPicture(App.Path + "\Desktop.jpg")
        w = x.Width: h = x.Height
        VScroll1.Max = h
        VScroll1.LargeChange = VScroll1.Max / 50
        VScroll1.SmallChange = VScroll1.Max / 100
        
        HScroll1.Max = w
        HScroll1.LargeChange = HScroll1.Max / 50
        HScroll1.SmallChange = HScroll1.Max / 100
        
        Me.Picture = Nothing
        Me.AutoRedraw = True
        Me.PaintPicture x, 0, 0, w, h, HScroll1.Value, VScroll1.Value, w, h, vbSrcCopy
        Me.AutoRedraw = False
    Move_Picture_Error:
    End Sub
      

  3.   

    to Gelim(Gelim) :
    为什么两个图片框都没有显示图片,窗体上反而有呢?
      

  4.   

    基本思路就象Gelim(Gelim)说的那样,但我不建议使用两层picturebox的方式,这种方式存在着最大的一个缺陷就是图片过大的时候,容易溢出,因为vb中控件的top、left等值实际是integer类型的,这样的话,twips单位下的65535才能容纳多高的图片。所以要不让就是把单位变为pixels,要不然就是采用api去copy部分的图形。
      

  5.   

    我也是用上面几位的思路解决这个问题的,但我随便问一下,现在有没有这个带滚动条的图picturebox控件呢,在图形超出图片框范围时自动显示滚动条?
      

  6.   

    完整代码:先创建一个新工程,然后在窗体上绘制两个图片框、一个水平滚动条和一个垂直滚动条。这里,用窗体的 Form_Load 事件设置比例模型,在父图片框中调整子图片框的大小,水平、垂直滚动条将定位并调整它们的大小,然后加载位图图形。将下列代码添加到窗体的 Form_Load 事件过程中:
    Private Sub Form_Load()
    '设置 ScaleMode 为像素。
    Form1.ScaleMode = vbPixels
    Picture1.ScaleMode = vbPixels
    '将 Autosize 设置为 True,以使 Picture2 的边界
    '扩展到实际的位图大小。
    Picture2.AutoSize = True
    '将每个图片框的 BorderStyle 属性设置为 None。Picture1.BorderStyle = 0
    Picture2.BorderStyle = 0'加载位图。
    '初始化两个图片框的位置。
    Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, 
    _ScaleHeight - HScroll1.Height
    Picture2.Move 0, 0'将水平滚动条定位。
    HScroll1.Top = Picture1.Height
    HScroll1.Left = 0
    HScroll1.Width = Picture1.Width'将垂直滚动条定位。
    VScroll1.Top = 0
    VScroll1.Left = Picture1.Width
    VScroll1.Height = Picture1.Height'设置滚动条的 Max 属性。
    HScroll1.Max = Picture2.Width - Picture1.Width
    VScroll1.Max = Picture2.Height - Picture1.Height
    '判断子图片框是否将充满屏幕。
    '若如此,则无需使用滚动条。
    VScroll1.Visible = (Picture1.Height < 
    _Picture2.Picture = 
    _LoadPicture("c:\Windows\Winlogo.bmp")
    Picture2.Height)HScroll1.Visible = (Picture1.Width < 
    _Picture2.Width)
    End Sub
    水平和垂直滚动条的 Change 事件用来在父图片框中上、下、左、右移动子图片框。请将下列代码添加到两个滚动条控件的 Change 事件中:
    Private Sub HScroll1_Change()
    Picture2.Left = -HScroll1.Value
    End Sub
    Private Sub VScroll1_Change()
    Picture2.Top = -VScroll1.Value
    End Sub
    将子图片框的 Left 和 Top 属性分别设置成水平和垂直滚动条数值的负值,这样,当上、下、左、右滚动时,图形可正确地移动。
    运行时调整窗体大小
    在上例中,窗体的初始大小限制图形的可视大小。在运行时当用户调整窗体大小时,为了调整图形视口应用程序的大小,可将下列代码添加到窗体的 Form_Resize 事件过程中:
    Private Sub Form_Resize()
    '调整窗体大小时,改变 Picture1的尺寸。
    Picture1.Height = Form1.Height
    Picture1.Width = Form1.Width'重新初始化图片和滚动条的位置。
    Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, 
    _ScaleHeight - HScroll1.Height
    Picture2.Move 0, 0HScroll1.Top = Picture1.Height
    HScroll1.Left = 0
    HScroll1.Width = Picture1.Width
    VScroll1.Top = 0
    VScroll1.Left = Picture1.Width
    VScroll1.Height = Picture1.Height
    HScroll1.Max = Picture2.Width - Picture1.Width
    VScroll1.Max = Picture2.Height - Picture1.Width'检查是否需要滚动条。VScroll1.Visible = (Picture1.Height < 
    _Picture2.Height)
    HScroll1.Visible = (Picture1.Width < 
    _Picture2.Width)
    End Sub
      

  7.   

    to Lucky527(Lucky)这段代码是不是有错误?VScroll1.Visible = (Picture1.Height < 
    _Picture2.Picture = 
    _LoadPicture("c:\Windows\Winlogo.bmp")
    Picture2.Height)HScroll1.Visible = (Picture1.Width < 
    _Picture2.Width)我把它改为VScroll1.Visible = (Picture1.Height < Picture2.Height)
    Picture2.Picture = LoadPicture("E:\x_xd_066.jpg")
    HScroll1.Visible = (Picture1.Width < Picture2.Width)没有达到效果,滚动条都出不来