你可以使用用一个picturebox来完成。
==界面设计==
如图,图片框名为Pic,横向滚动条名为HS,纵向滚动条名为VS。
将你的窗口内容放入Pic中。此时,Pic的大小就是你内容的大小。也就是说,Pic的大小由你来设置。
==代码编写==
滚动条的属性设置将会被放入Pic的尺寸变更事件中,也就是Resize事件中。
代码如下。
Private Sub Pic_Resize()
If Pic.Width < Me.Width - VS.Width Then
'当内容宽没有超过框架宽时
HS.Max = 0
HS.Enabled = False
'禁用横向滚动条
Else
HS.Enabled = True
'否则启用横向滚动条
End If
If Pic.Height < Me.Height - HS.Height Then
'当内容高没有超过框架高时
VS.Max = 0
VS.Enabled = False
'禁用纵向滚动条
Else
VS.Enabled = True
'否则启用纵向滚动条
End If
HS.Max = Int((Pic.Width - Me.Width - VS.Width) / 100)
'将横向滚动条的最大值动态设置为限制大小和内容大小的差的百分之一
VS.Max = Int((Pic.Height - Me.Height - HS.Height) / 100)
'将纵向滚动条的最大值动态设置为限制大小和内容大小的差的百分之一
End Sub
注意!滚动条MAX属性的最大值为32767。这代表内容的尺寸不能大于3276700 * 3276700。
滚动条在被滚动时要作出反应。
代码如下。
Private Sub HS_Change()
Pic.Left = -HS.Value * 100
'移动Pic在Form中的水平位置,以便查看其他地方
End Sub
Private Sub VS_Change()
Pic.Top = -VS.Value * 100
'移动Pic在Form中的垂直位置,以便查看其他地方
End Sub
注意!此操作在移动到滚动条末端时会出现不大于100的偏差。
如果要消除偏差,需要加一条判据。以水平滚动条为例。
代码如下。
If -Pic.Left > Me.Width - VS.Width Then
Pic.Left = -(Me.Width - VS.Width)
End If
注意!'- VS.Width' 的作用是精确框架的宽度,即将框架宽度除去滚动条宽所占的位置。同理,在垂直滚动条的事件中,应当将水平滚动条的高度去除,即 '- HS.Height'。
特殊情况:如果你的Pic大小在设计时已经超过限制大小,则在Form_Load事件中加入一条代码:
Call Pic_Resize
此时,程序可以运行。
附加!!.NET版本下,Call语句改为如下:
Call Pic_Resize(Me, e)
更简单的方法
假设当前窗体form1,放一picturebox控件
picturebox的anchor属性设置为:Top, Bottom
form1.AotoScroll属性设置为true即可。form1会根据picturebox的大小自动出现滚动条。
picturebox显示的图片自己添加
额……VB.NET~几?2003?2005?2008?2010?还是2012?2013?