栏目列表
本年度VB学习之第二章
发布时间:2012-12-25   点击:   来源:本站原创   录入者:毛宇凯

 

Visual Basic 提供了列表框控件(ListBox)以供用户进行多个项目的选择。在工具箱面板上,列表框控件的图标如图一所示:

图一
默认的列表框控件名为 ListX(X为阿拉伯数字 1、2、3,等等),规则的命名方式为:LstX(X为用户自定义的名字,如 LstName、LstUser,等等)。
一、列表框控件的主要属性:
列表框中可以有多个项目供选择,用户通过单击某一项选择自己所需要的项目,如果项目太多,超出了列表框设计时的长度,则自动增加竖向滚动条,如图二:

图二
除了一些常见的诸如 Font 、Height、Left、Width、Enabled、Name 等属性外,列表框还有一些特殊的属性:
1、List(列表)属性:
List 是列表框最重要的属性之一,其作用是罗列或设置表项中的内容。可以在界面设置时直接输入内容,如图三:

图三
在程序运行时,列表框中所有的选项,都可以通过 List(下标值) 的形式表示。比如列表框中的第一项,用 List(0)表示,列表框中的第二项,用 List(1)表示,列表框中的第十项,用 List(9)表示,以此类推。
大家注意,列表框中的第一项,是 List(0) ,而不是 List(1) 。
<1>、List() 属性的使用是非常灵活的,比如我们要从如图二的列表框(Lst1)中取出第三项内容,可以用下面的代码做到:A$ = Lst1.List(2)
其中,A 是一个变量;$ 指明了这个变量的类型:字符串型;这句话的意思是:将 Lst1 列表框中第三项(List(2))取出来然后赋值给字符串变量 A 。
象上面这种赋值办法,在 VB 中是非常普遍的,又如以前我们学到的:
LblShow.Caption = "Visual Basic",这句话是指将 Visual Basic 这个字符串赋值给 LblShow 标签控件并作为其标题。
紧接上面的内容,假设我们用一个标签显示出刚才取出的表项:
LblShow.Caption = A$
那么显示的结果正是我们取出的选项。
可见,取出某个列表框中的某一表项并将其赋值给某个变量,代码如下:
字符串变量 = 列表框名称.List(X) ,其中,X 是下标。
<2>、通过 List() 改变原有表项:假设我们要将如图二的列表框中第三项内容改为“跟我学 VB”,只需输入下面的代码即可:
Lst1.List(2) = "跟我学 VB"
上句话的意思是将“跟我学 VB”字符串赋值给 Lst1 并作为其第三项的内容。
结果如图四:

图四
可见,要修改某个列表框中某一选项:
列表框名称.List(X) = "欲修改成的内容" ,其中,X 是下标。
2、ListCount 属性:
本属性返回列表框表项数量的数值,只能在程序运行时起作用。比如:一个有着四种选项的列表框,那么 ListCount 就为 4 ;一个列表框有五个选项,那么 ListCount 就为 5 。
返回一个列表框的表项数量值并将其赋值给某个变量,代码如下:
数值型变量 = 列表框名称.ListCount
比如要返回图二列表框的 ListCount:
X% = Lst1.ListCount ,其中,X 是变量,% 表示X是整数类型的变量。
3、ListIndex(索引)属性:
本属性用来 返回或设置控件中当前选择项目的索引号,只能在程序运行时使用。第一个选项的索引号是 0 ,第二个选项的索引号是 1 ,第三个选项的索引号是 2 ,依此类推,ListCount 始终比最大的 ListIndex 值大 1 。当列表框没有选择项目时, ListIndex 值为 -1 。
在程序中设置 ListIndex 后,被选中的项目呈反相显示,如图五:

图五
在列表框控件的所有属性中,本属性是非常重要的,因为一个列表,事先你并不知道用户将要选择哪一条项目,这时,只有根据 ListIndex 返回的数值,我们才能让程序针对用户的选择做出适当的反应。
返回 ListIndex 的代码如下:
X% = 列表框名称.ListIndex
联想根据前面的知识我们知道,要取出第三项内容,代码如下:
A$ = Lst1.List(2)
假设现在选中的是第三项,但我们事先不知道用户要选择这一项,那么又应该如何访问这第三项呢?
代码如下:A$ = Lst1.List(Lst1.ListIndex) 此时,Lst1.ListIndex 等同于 2 。
仔细想一想,为何要如此书写?
4、Columns(列)属性:
本属性用来确定列表框的列数,当值为 0 时,所有项目呈单列显示;当值为 1 或者大于 1 ,项目呈多列显示。Columns 属性只能在界面设置时指定。如图六:

图六
默认状态时,如果项目的总高度大于列表框的高度,那么列表框右边会自动增加一个垂直滚动条,用来上下移动列表框。
5、MultiSelect(多重选择)属性:
本属性决定了选项框中的内容是否可以进行多重选择,只能在界面设置时指定,程序运行时不能予以修改。如图七:

图七
MultiSelect 共有三个值:0 ,不允许多项选择,如果选择了一项就不能选择其他项;1 ,允许多重选择,但功能不如 2 ,可以用鼠标或空格选择;2 ,功能最强大的多重选择,可以结合 Shift 键或 Ctrl 键完成多个表项的多重选择。方法是:单击所要选择的范围的第一项,然后按住 Shift 键,再单击选择范围最后一项。
6、Style(类型)属性:
本属性决定了列表框的外观,共有两个值:1 ,Standard ,即为标准型,如图八:

图八
2 ,CheckBox ,复选框型,如图九:

图九
本属性只能在界面设置时确定。
7、Selected(选中)属性:
本属性返回或设置在列表框控件中某项目是否选中的状态。选中时,值为 True ;未被选中,值为 False 。
代码规则如下: 列表框名称.Selected(索引值) = True/False
注意,索引号其实是项目的下标值,如果是第三项,那么索引值是 2 ,如果是第十项,那么索引值是 9 ,以此类推。
例一:
有如图十这样一个应用程序:

图十
列表框(LstName)中是人物的名称,用户选择不同的名字,下面的标签(LblShow)自动显示此人的相关信息。
源代码如下:
Private Sub LstName_Click()
 If LstName.Selected(0) = True Then
  LblShow.Caption = "马拉多纳是阿根廷的球星"
 ElseIf LstName.Selected(1) = True Then
  LblShow.Caption = "贝肯鲍尔是德国的球星"
 ElseIf LstName.Selected(2) = True Then
  LblShow.Caption = "罗纳尔多是巴西的球星"
 Else
  LblShow.Caption = "贝克汉姆是英国的球星"
 End If
End Sub
本程序是根据用户选择的不同,在标签按件中显示不同的信息;另外,我们用到了前面学到的 If ···Then··· ElseIf··· End If 语法。
8、SelCount(选中项目数量):
只有当 MultiSelect 属性值为 1 或 2 时,本属性才起作用,用来读取列表框中所选项目的数目,通常与 Selected 一起使用,以处理控件中的所选项目。
二、列表框控件的主要事件:
列表框控件主要接收 Click 与 DblClick ,如例一。
三、列表框控件的方法:
1、增加项目:AddItem
用 AddItem 可以为列表框增加项目,代码规则如下:
列表框名称.AddItem 欲增项目[,索引值]
其中,索引值是可选项,是指欲增项目放到原列表框中的第几项,如放在第三项,那么索引值是 2 ,放在第五项,索引值则是 4 。
假设我们要在如图十这样的程序中增加项目:LstName.AddItem "郝海东",4
2、清除所有:Clear
用 Clear 可以清除列表框中所有的内容,代码如下:
列表框名称.Clear
3、删除选项:RemoveItem
此方法可以删除列表框中指定的项目,代码如下:
列表框名称.RemoveItem 索引值
其中,索引值是必须的,表示欲删除哪一个项目。
同样如图十的程序,假设我们要删除第三个项目,代码如下:
LstName.RemoveItem 2
联想对于任意一个列表框,要删除已经选中的项目,代码如下:
列表框名称.RemoveItem 列表框名称.ListIndex
比如:LstName.RemoveItem LstName.ListIndex
为什么这样写?请大家仔细想想。
四、知识点:
1、本节的难点在于 List() 、ListIndex ,请大家一定要把它们吃透。
2、本节提到了变量,关于它们的详细情况,我们将在以后学习,目前大家只需要知道,这里的变量只是个临时工,主要用来储存一些临时数据。
组合框控件(ComboBox)将文本框控件(TextBox)与列表框控件(ListBox)的特性结合为一体,兼具文本框控件与列表框控件两者的特性。它可以如同列表框一样,让用户选择所需项目;又可以如文本框一样通过输入文本来选择表项。
组合框默认的名称是 ComboX(X为阿拉伯数字 1、2、3 ,等等),规则的命名方式为:CboX(X为用户自定义的名字,如 CboName、CboColor ,等等)。组合框在 VB 工具箱面板中的图标如图一:

图一
一、组合框控件的主要属性:
列表框控件的大部分属性同样适合于组合框,此外,组合框还有一些自己的一些属性:
1、Style(类型)属性
组合框共有三种 Style :
当值为 0 ,组合框是“下拉式组合框”(DropDown Combo),与下拉式列表框相似,但不同的是,下拉式组合框可以通过输入文本的方法在表项中进行选择,可识别 Dropdown 、Click、Change 事件,如图二:

图二
当值为 1 ,组合框称为“简单组合框”(Simple Combo),由可以输入文本的编辑区与一个标准列表框组成,可识别 Change 、DblClick 事件,如图三:

图三
当值为 2 ,组合框称为“下拉式列表框”(Dropdown ListBox),它的右边有个箭头,可供“拉下”或“收起”操作。它不能识别 DblClick 及 Change 事件,但可识别 Dropdown 、Click 事件,如图四:

图四
综上所述,如果你想让用户能够输入项目,则应将组合框设置成 0 或 1 ,如果只想让用户对已有项目进行选择,则应将组合框设置成 2 。
2、Text(文本)属性:
本属性值返回用户选择的文本或直接在编辑区域输入的文本,可以在界面设置时直接输入,如图五:

图五
但要显示多个选项,不能简单地用 Text 属性指定,因为后一选项会覆盖前面的选项,这时,常常要用到窗体的载入事件。(Form_Load)
Form_Load 的意思是,在打开窗口的同时,将指定的内容载入。详细情况见后面的窗体篇。
二、组合框的事件:
根据组合框的类型,它们所响应的事件是不同的。
例如,当组合框的 Style 属性为 1 时,能接收 DblClick 事件,而其他两种组合框能够接收 Click 与 Dropdown 事件;当 Style 属性为 0 或 1 时,文本框可以接收 Change 事件。
三、组合框的方法:
跟列表框一样,组合框也适用 AddItem 、Clear 、RemoveItem 方法。
四、组合框举例:
有如图六这样一个应用程序:

图六
在名为 CboChoose 的下拉组合框中任意选择一种机型,自动会在名为 LblShow 的标签上显示出来。
程序代码如下:
窗体:
Private Sub Form_Load()
IBM"
 CboChoose.AddItem "AST"
 CboChoose.AddItem "Compaq"
 CboChoose.AddItem "联想 CboChoose.AddItem "长城"
 CboChoose.AddItem "东海"
End Sub
"
下拉式组合框的 Click 事件:
Private Sub CboChoose_Click()
 LblShow.Caption = "你的机型是:" & CboChoose.Text
End Sub
前面我们学了列表框控件(ListBox)与组合框控件(ComboBox),本节将就它们制作一个简单的应用程序。
一、程序界面:界面如图一
 
 
 
 
 

图一
二、程序目的:
两个列表框,左列表框(LstLeft)罗列了一些歌手名字,右列表框 (LstRight)初始状态为空;点击向右按钮(CmdRight),可以将左列表框中的指定选项移动到右边列表框;点击全部向右按钮(CmdAllRight),可以将左列表框中所有的内容搬到右列表框中;点击向左按钮(CmdLeft),可以将右列表框中选定的表项移动到左列表框 中;点击全部向左按钮(CmdAllLeft),可以将右列表框中的所有内容移动到左列表框中。
三、属性设置:
见图一,注意,列表框的 Style 都为 0 即标准类型。
四、程序代码:
1、窗体的载入事件(Form_Load)
Private Sub Form_Load()
 LstLeft.AddItem "刘德华"
 LstLeft.AddItem "张学友"
 LstLeft.AddItem "郭富城"
 LstLeft.AddItem "黎 明"
 LstLeft.AddItem "谭咏麟"
 LstLeft.AddItem "梅艳芳"
 LstLeft.AddItem "张曼玉"
End Sub
2、向右按钮的点击事件(CmdRight_Click)
Private Sub CmdRight_Click()
 LstRight.AddItem LstLeft.List(LstLeft.ListIndex)
 LstLeft.RemoveItem LstLeft.ListIndex
End Sub
3、全部向右按钮的点击事件(CmdAllRight_Click)
Private Sub CmdAllRight_Click()
 LstRight.AddItem "刘德华"
 LstRight.AddItem "张学友"
 LstRight.AddItem "郭富城"
 LstRight.AddItem "黎 明"
 LstRight.AddItem "谭咏麟"
 LstRight.AddItem "梅艳芳"
 LstRight.AddItem "张曼玉"
 LstLeft.Clear
End Sub
4、向左按钮的点击事件(CmdLeft_Click)
Private Sub CmdLeft_Click()
 LstLeft.AddItem LstRight.List(LstRight.ListIndex)
 LstRight.RemoveItem LstRight.ListIndex
End Sub
5、全部向左按钮的点击事件:(CmdAllLeft_Click)
Private Sub CmdAllLeft_Click()
LstLeft.AddItem "刘德华"
LstLeft.AddItem "张学友"
LstLeft.AddItem "郭富城"
LstLeft.AddItem "黎 明"
LstLeft.AddItem "谭咏麟"
LstLeft.AddItem "梅艳芳"
LstLeft.AddItem "张曼玉"
LstRight.Clear
End Sub
五、注意事项:
1、窗体载入事件:
就是窗体打开时自动加载的信息,也可以在界面设置时通过左列表框的 List 属性设定。如图二:

图二
2、无论是部分转移,还是全部移动,都要记着将本已移动的表项在原有列表框中清除,如代码: LstLeft.RemoveItem LstLeft.ListIndex
如果不清除,那么表项移动后,原先的表项还在原处,用户可能对同一表项多次选择。如图三

图三
3、第一个应用程序还没编写完,仔细看一下,哪里还需要再编写?
没错,就是向左按钮与向右按钮的点击事件还没完善,按照上面的程序,如果在初始状态下(也就是没有选中任何表项),点击向左或向右按钮会产生程序错误。
所以我们得在原来向左或向右按钮的事件中增加判断过程,修改后的代码如下:
向右按钮:
Private Sub CmdRight_Click()
If LstLeft.SelCount > 0 Then
LstRight.AddItem LstLeft.List(LstLeft.ListIndex)
LstLeft.RemoveItem LstLeft.ListIndex
End If
End Sub
向左按钮:
Private Sub CmdLeft_Click()
If LstRight.SelCount > 0 Then
LstLeft.AddItem LstRight.List(LstRight.ListIndex)
LstRight.RemoveItem LstRight.ListIndex
End If
End Sub
看见了吧,向左与向右按钮还得增加列表框中是否有表项被选中的判断。
4、大家先移动左列表框中的一个项目到右列表框中,然后再全部移过去,你又会发现什么样的问题呢?
这时,你会发现右列表框的项目多了一项,而这多出来的表项正是最先移过去的那个项目,那么,全部移动的按钮还需要加以完善。如图四:

图四
解决办法很简单,在全部移动时,先清除目标列表框的内容再进行移动,修改后的代码如下:
全部向右按钮:
Private Sub CmdAllRight_Click()
LstRight.Clear
LstRight.AddItem "刘德华"
LstRight.AddItem "张学友"
LstRight.AddItem "郭富城"
LstRight.AddItem "黎 明"
LstRight.AddItem "谭咏麟"
LstRight.AddItem "梅艳芳"
LstRight.AddItem "张曼玉"
LstLeft.Clear
End Sub
全部向左按钮:
Private Sub CmdAllLeft_Click()
LstLeft.Clear
LstLeft.AddItem "刘德华"
LstLeft.AddItem "张学友"
LstLeft.AddItem "郭富城"
LstLeft.AddItem "黎 明"
LstLeft.AddItem "谭咏麟"
LstLeft.AddItem "梅艳芳"
LstLeft.AddItem "张曼玉"
LstRight.Clear
End Sub
5、本节的程序只是为了让大家便于理解才这样编写的,而最为科学、最为有效的编写方法,我们将在下一节讲述。在开始下一节课程之前,大家可以将两个列表框的 Style 改成 1 即复选类型,你会发现本节所编写的程序又有很多问题了,该如何解决呢?下一节见!
在上一节,我们制作了一个 Style 为 0 的列表程序,现在我们来制作一个 Style 为 1 的列表程序。
虽然仅仅是 Style 的改变,但整个程序发生了完全的变化。本节中的程序更为科学,而且只需改动几行代码,同样适合上一节的程序。
在编制本节程序前,我们有必要对 For ··· Next ···循环结构语句做个了解。
一、For 循环语句:
在实际生活中,我们经常会遇到一些操作并不复杂,但需要重复多次处理的情况,如人口统计、银行利率的计算等,为此,Visual Basic 提供了循环语句来专门解决此类情况。
循环语句的具体情况,我们将在以后的章节中阐述,本节我们只是针对 For 循环语句做个大致的了解。
1、For ··· Next ···语句的一般格式:
For 变量 = Start To End [Step]
   [需要循环的语句]
   [Exit For]
Next 变量
说明:
(1)、For 后的“变量”与 Next 后的“变量”为同一个,“变量”应该是数值类型的。
(2)、Start 代表的是循环的初始值,End 代表的是循环的终值。假设从 1 到 100 进行循环,那么,循环初值是 1 ,终值是 100 ;假设从 1 到 50 进行循环,那么初值是 1 ,终值是 50 。
(3)、To 是循环中的关键字,表示从初值到终值的范围,不能省略。
(4)、Step 是步长值,代表变量的增量,既可以是正数(递增循环),也可以是负数(递减循环),但不能为 0 ,如果步长值为 1 即默认状态,可以省略不写。
(5)、需要循环的语句,既可以是一个,也可以是多个语句,但必须放在 For 与 Next 之间。
(6)、Exit For:当程序执行到此处,自动退出本层循环。
(7)、需要循环的语句与 Exit For 都可以省略,这时表示的是一个无内容的空循环,主要做为程序延迟使用。
2、示例一:
编写一个程序,用来计算 1 到 100 间所有整数的和是多少。
(1)、程序界面与控件属性:
程序界面与控件属性如图一,为了让大家看得更为清楚,我们将标签控件的 BoderStyle 属性设为 1 。

图一
(2)、程序功能:
用户点击“开始”按钮(CmdStart)开始计算,完成后将结果用标签(LblShow)显示出来。
(3)、书写代码:
“开始”按钮的点击事件:
Private Sub CmdStart_Click()
x = 0
For y = 1 To 100
x = x + y
Next y
LblShow.Caption = "最后的结果是:" & x
End Sub
说明:
(1)、1 到 100 中所有整数的和可以这样来看:1+2+3+······+100 ,即 100 次相加,那么这重复的 100 次相加可以通过 For 循环来完成。
(2)、程序中 y 只是用来决定循环次数的变量,通常的,我们会利用其他变量来编写程序,这里的 X 就是一个求和累加器,它的初值是 0 ,终值则是我们最后需要的数值。
(3)、X = X +y ,是指变量 X 与 y 相加后将新的值赋给 X 。当 X 为初始的 0 时,y 进入第一次循环即 y = 1 ,X + Y = 1 ;系统将 X = 1 记录下来,然后进入第二次循环即 y =2 ,X + Y = 3 (1 + 2),然后将 X = 3 记录下来并进入第三次循环,以此类推。这就将 1+2+3+······+100 的最终值算了出来。
(4)、经过第一百次循环,程序执行 Next y 后的语句,即将最后结果用标签显示出来。
3、示例二:
计算 1 到 100 间所有奇数的和。
只需将上例中的“开始”按钮的循环程序加上步长值即可。代码如下:
Private Sub CmdStart_Click()
x = 0
For y = 1 To 100 Step 2
x = x + y
Next y
LblShow.Caption = "最后的结果是:" & x
End Sub
二、列表程序二:
1、程序界面:
最终的程序界面如图二:

图二
跟上一节的内容相比,带复选框的选择是通过勾选复选项前面的复选框来确定一个表项是否被选中的,它可以一次选中多个表项并一次移动多个表项。
上一节的程序,一次只能移动一个表项。
2、前后两种程序的区别:
上一节的程序中,对单个表项进行移动,首先加入了是否选中的判断,然后再进行移动;全部移动,首先对目标框清零,再进行移动。它们虽然比较好理解,但程序的有效性却不佳。
本节的程序,对单个与全部表项进行移动,都采用循环法,可以一次移动多个表项。
3、程序代码:
(1)、窗体的载入事件(Form_Load)跟上一节一样:
Private Sub Form_Load()
 LstLeft.AddItem "刘德华"
 LstLeft.AddItem "张学友"
 LstLeft.AddItem "郭富城"
 LstLeft.AddItem "黎 明"
 LstLeft.AddItem "谭咏麟"
 LstLeft.AddItem "梅艳芳"
 LstLeft.AddItem "张曼玉"
End Sub
(2)、向右按钮的点击事件(CmdRight):
Private Sub CmdRight_Click()
 Dim X As Integer
 While LstLeft.SelCount > 0
  For X = 0 to LstLeft.LstCount - 1
   If LstLeft.Selected(X) = True Then
    LstRight.AddItem LstLeft.List(X)
    LstLeft.RemoveItem X
    Exit For
   End If
  Next X
 Wend
End Sub
(3)、全部向右按钮的点击事件(CmdAllRight)
Private Sub CmdAllRight_Click()
 Dim X As Integer
 For X = 0 to LstLeft.ListCount - 1
  LstRight.AddItem LstLeft.List(X)
 Next X
 LstLeft.Clear
End Sub
(4)、以此类推,输入向左按钮(CmdLeft)与全部向左按钮(CmdAllLeft)的点击事件,最后按 F5 键运行程序。
滚动条常常用来附在某个窗口上帮助观察数据或确定位置,也可以用来 作为数据输入的工具。在日常操作中,我们常常遇到这样的情况:在某些程序中,如 Photoshop ,一些具体的数值我们并不清楚,如调色板上的自定义色彩,这时,可以通过滚动条,用尝试的办法找到自己需要的具体数值。
在 Visual Basic 中,滚动条分为横向(HscrollBar)与竖向(VscrollBar)两种,命名规则为:HsbX 或 VsbX ,如 HsbShow、VsbShow ,等等。它们在工具箱上的图标如图一:

图一
选中滚动条按钮,把鼠标指针放到界面设计区,然后拖动,画出符合自己要求的滚动条,或者直接双击该按钮,自动在界面设计区生成默认大小的滚动条,如图二所示:

图二
一、滚动条控件的属性:
1、Max(最大值)与 Min(最小值)属性:
滚动块处于最右边(横向滚动条)或最下边(竖向滚动条)时返回的值就是最大值;滚动块处于最左边或最上边,返回的值最小,如图三所示:

图三
Max 与 Min 属性是创建滚动条控件必须指定的属性,默认状态下, Max 值为 32767 ,Min 值为 0 。本属性既可以在界面设计过程中予以指定,也可以在程序运行中予以改变,如:
HsbShow.Min = 3
HsbShow.Max = 30
2、Value(数值)属性:
Value 属性返回或设置滚动滑块在当前滚动条中的位置,如图三所示。
Value 值可以在设计时指定,也可以在程序运行中改变,如:
HsbShow.Value = 24
3、SmallChange(小改变)属性:
当用户单击滚动条左右边上的箭头时,滚动条控件 Value 值的改变量就是 SmallChange,如图四:

图四
4、LargeChange(大改变)属性:
单击滚动条中滚动框前面或后面的部位时,引发 Value 值按 LargeChange 设定的数值进行改变,如图五:

图五
二、滚动条控件的事件:
与滚动条控件相关的事件主要是 Scroll 与 Change ,当在滚动条内拖动滚动框时会触发 Scroll 事件(但要注意,单击滚动箭头或滚动条时不发生 Scroll 事件),滚动框发生位置改变后则会触发 Change 事件。Scroll 事件用来跟踪滚动条中的动态变化,Change 事件则用来得到滚动条最后的值。
三、示例:
有如图六这样一个应用程序,当滚动条(HsbShow)的滚动块发生位移时,下面的显示标签(LblShow)自动显示滚动条当前的值;在拖动滚动框的过程中,显示标签(LblShow)则会显示“拖动中……”字样。

图六
1、创建界面。
其中,HsbShow 的 Min 为 0 ,Max 为 100 ,SmallChange 为 5 ,LargeChange 为 10 。
2、双击滚动条(HsbShow),进入代码编写窗口:
Private Sub HsbShow_Change()
 LblShow.Caption = "滚动条当前值为:" & HsbShow.Value
End Sub
3、滚动条的拖动事件:
Private Sub HsbShow_Scroll()
 LblShow.Caption = "拖动中……"
End Sub
有如图一这样一个应用程序,分别拖动红、绿、蓝三个滚动框来决定文本框的背景色,另外还有一个竖向滚动条,可以用来控制文本框的大小。

图一
一、图像的着色问题:
自然界中千变万化的色彩,在电脑上可以用红绿蓝三种原色组合而成,这也正是图像处理软件中 RGB 模式的原理所在,如黑色是由皆为 0 的红绿蓝三种颜色组成,白色为皆为 255 的三原色合成,等等。
在 RGB 模式中,每种色彩最多有 255 种变化,也就是说,只要 R 、G 、B 三种色彩都在各自的 255 范围内,这种色彩就是有效的。
在 VB 中,也用 RGB 来作为色彩的描述,如文本框的背景色为白色,则表示为:Text1.Backcolor = RGB(255,255,255)。
二、VB 中对象的初值储存问题:
在VB中,常常会对某个对象进行位置移动,或者动态改变对象的尺寸,一般情况下,都会在程序调入后先对原始数据进行一些存储,以便发生位移或改变大小后能恢复原样,而这一功能,是通过初值储存来完成的。
方法是,将原始数据,如坐标值、原始长宽高,等等,赋值给某个变量,最后通过变量的调用就能完成默认状态的恢复。
三、程序设计:
1、创建如图一的程序界面。
文本框的属性:
Name:TxtContent  Text:None
三个表示色彩的标签:
红色标签,Name:LblRed  Caption:红色
绿色标签,Name:LblGreen  Caption:绿色
蓝色标签,Name:LblBlue  Caption:蓝色
三个表示色彩的横向滚动条:
Min:0  Max:255  SmallChange:1  LargeChange:5
显示“大小”字样的标签:
Name:LblSize  Caption:大小
对文本框大小进行控制的竖向滚动条:
Name:VsbSize  Min:0  Max:100  SmallChange:1  LargeChange:5
用于显示大小变化尺寸的标签:
Name:LblShow  Caption:None
2、双击红色滚动条,在弹出的程序代码窗口中输入:
Private Sub HsbRed_Change()
TxtContent.BackColor = RGB(HsbRed.Value, HsbGreen.Value, HsbBlue.Value)
End Sub
另外,就 HsbRed 的 Scroll 事件也输入上面的代码:
Private Sub HsbRed_Scroll()
TxtContent.BackColor = RGB(HsbRed.Value, HsbGreen.Value, HsbBlue.Value)
End Sub
3、同理所得,在绿色与蓝色滚动条中输入相应代码。这样,通过滚动条控制文本框背景色的目的达到了。
4、在“通用”选项中定义全局全量,用来储存文本框的原始尺寸:
Dim Iwidth As Integer
Dim Iheight As Integer
5、用来改变文本框尺寸的竖向滚动条:
Change 事件:
Private Sub VsbSize_Change()
TxtContent.Width = Iwidth * (VsbSize.Value / 100)
TxtContent.Height = Iheight * (VsbSize.Value / 100)
LblShow.Caption = VsbSize.Value & "%"
End Sub
Scroll 事件:
Private Sub VsbSize_Scroll()
TxtContent.Width = Iwidth * (VsbSize.Value / 100)
TxtContent.Height = Iheight * (VsbSize.Value / 100)
LblShow.Caption = VsbSize.Value & "%"
End Sub
6、调试:
按 F5 键进行调试,发现文本框的尺寸无法调整。这是因为,没有在初始状态
下将原文本框的宽度、高度赋值给变量。
在 Form 的 Load 事件中输入以下代码:
Private Sub Form_Load()
Iwidth = TxtContent.Width
Iheight = TxtContent.Height
LblShow.Caption = "100%"
End Sub
7、最后结果如图二:

图二
在 Windows 应用程序中常常要用到时间控制的功能,如在程序界面上显示当前时间,或者每隔多长时间触发一个事件,等等。而 Visual Basic 中的 Timer(时间)控制器就是专门解决这方面问题的控件。
Timer 控制器在工具箱面板上的图标如图一:

图一
选中时钟控制器,将鼠标移到界面设计区,在窗体中拖出一个矩形就可以创建一个 Timer 控件了。跟其他控件不同的是,无论你绘制的矩形有多大,Timer 控件的大小都不会变,如图二:

图二
另外,Timer 控件只有在程序设计过程中看得见,在程序运行时是看不见的。
一、Timer 控件的属性:
Timer 控件可以使用 Name 属性与 Enabled 属性,但最重要的是 Interval 即时间间隔属性。
Interval 属性决定了时钟事件之间的间隔,以毫秒为单位,取值范围为 0 ~ 65535 ,因此其最大时间间隔不能超过 65 秒,即一分钟多一点的时间。如果把 Interval 属性设置为 1000 ,则表示每秒钟触发一个 Timer 事件。
其语法格式:
Timer.Interval = X ,其中,X 代表具体的时间间隔。
二、Timer 控件的 Timer (定时)事件:
当一个 Timer 控件经过预定的时间间隔,将激发计时器的 Timer 事件。使用 Timer 事件可以完成许多实用功能,如显示系统时钟、制作动画,等等。
三、示例:
有如图三这样一个应用程序,标签能够自动显示当前时间。

图三
1、创建程序界面:
界面如图四,为了便于大家观看,我们将 LblShow 的边界类型设为 1 。
另外,别忘了把 Timer1 的 Interval 属性设置为 1000 。

图四
2、在 Timer1 的 Timer 事件中输入以下代码:
Private Sub Timer1_Timer()
LblShow.FontSize = 30
LblShow.FontName = "宋体"
LblShow.Caption = "当前时间为:" & Time
End Sub
注意,Time 是 Visual Basic 中的关键詞,表示显示系统时间。
在一个应 用程序中,对文件的处理是一个比较常用的操作,如打开文件、保存文件,等等。Visual Basic 提供了三个控件对磁盘文件夹与文件进行显示与操作,它们分别是:DriveListBox(磁盘列表框)控件、DirListBox(文件夹列表框)控 件,以及 FileListBox(文件列表框)控件。如图一:

图一
一、DriveListBox(磁盘列表框)控件:
在工具箱面板上,DriveListBox 控件的图标如图二:

图二
在窗口中创建的磁盘列表框可以自动显示电脑上或网络上的所有磁盘驱动器,另外,还可以通过语法设置运行时显示的驱动器名称,这就要用到 Drive 属性。
磁盘列表框名称.Drive = Drive(如 C: ,或者 D:,等等)。
比如,要在窗体启动时把当前磁盘改为 F 盘,那么:
Private Sub Form_Load()
  Drive1.Drive = "F:"
End Sub

图三
二、DirListBox(文件夹列表框)控件:
在工具箱面板上,DirListBox 控件的图标如图四:

图四
文件夹列表框控件可以显示与设置文件夹的路径,当用户在窗口中创建 DirListBox 控件时,双击其中的文件夹,不需进行编程就能自动显示下一级的文件夹,如图五:

图五
本控件的主要属性是 Path 属性,用来返回或设置当前文件夹的路径,只能在程序运行中使用,其语法是:
文件夹列表框名称.Path = 具体的路径
比如,我们要在窗体启动时把默认显示的文件夹改为 D:\Mytool\ ,程序可以这样写:
Private Sub Form_Load()
Dir1.Path = "D:\Mytool\"
End Sub
三、FileListBox(文件列表框)控件:
跟前面两个控件一样,本控件能够自动显示符合条件的文件清单。如图六:

图六
文件列表框控件主要有两个属性,即 Path 属性与 FileName 属性,前者代表文件的路径,从显示路径的功能上来说,比后者更简便一些;后者则用来返回或设置所选文件的路径与文件名,其语法是:
文件列表框名称.FileName = 路径
比如,我们要在窗体启动时将 E:\稿件 目录下的所有 ZIP 文件列出来,程序可以这样写:
Private Sub Form_Load()
File1.FileName = "E:\稿件\*.zip"
End Sub
结果如图七:

图七
四、三个控件的连接:
上面我们就三个控件进行了分别的学习,在程序中,它们却是互不关连的,并不是只要在窗体中创建了它们,然后对某个控件(如磁盘列表框)进行操作,其他控件就会自动显示相应的磁盘下的文件,这需要用程序进行实现。
1、将磁盘列表框的操作赋值给文件夹列表框的 Path 属性,在磁盘列表框的 Change 事件中输入如下代码:
Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive
End Sub
2、对文件夹列表框控件进行的操作,直接影响文件列表框所显示的内容:
Private Sub Dir1_Change()
  File1.Path = Dir1.Path
End Sub
最后结果如图八:

图八
 
窗体犹如一块画布,在设计时是程序的设计区域,而在运行程序时,每个窗体对应于一个窗口。
一、窗体的结构:
窗体结构与普通 Windows 下的窗口非常相似,如图一:
 
 
 
 

图一
系统菜单:Form1.ControlBox,点击它可以弹出菜单命令。
标题栏:Form1.Caption,显示的窗口标题,如本例中的“Form1”。
最小化按钮:Form1.MinButton 。
最大化按钮:Form1.MaxButton 。
二、窗体的主要属性:
1、名称:命名规则为 FrmX ,如 FrmShow 、FrmFirst ,等等,主要用于程序调用。
2、AutoRedraw(自动重画):本属性控制图像的重建,常用于多窗体程序设计中,语法如下:
窗体名称.AutoRedraw = True/False
当 AutoRedraw 设置为 True 时,那么本窗体被另外的窗体覆盖后,又回到此窗体时,将自动重新刷新或重画窗体上的所有图形;如果是 False ,则必须通过事件过程来设置这一操作。
默认属性为 False。如图二:

图二
3、BackColor(背景色)与 ForeColor(前景色):
前者用来指定窗体的背景色,如图三:

图三
后者用来指定文本或图形的前景色,如图四:

图四
4、Height(高度)与 Width(宽度):
这两个属性用来指定窗体的高度与宽度,其单位是 Twip ,即 1 点的 1/20 (1/1440 英寸)。
如要让窗体的高度变为 200 ,宽度变为 300 ,那么程序应该写成:
Private Sub Form1_Click()
 Form1.Height = 200
 Form1.Width = 300
End Sub
5、Top(顶部)与 Left(左边距)属性:
通过这两个属性可以控制窗体的坐标位置,默认单位是 Twip 。
要注意的是,随对象的不同,这个 Top 与 Left 的意义不同。当对象是窗体,Top 指的是窗体顶部与屏幕顶部的相对距离,Left 指的是窗体左边界与屏幕左边界的间距;当对象是其他控件时,它们分别表示控件顶部、左边与窗体顶部、左边之间的距离,如图五所示:

图五
语法示例:
Private Sub Form1_Click()
 Form1.Top = 200
 Form1.Left = 300
End Sub
上面的语句会把 Form1 窗体移动到距屏幕顶部 200 Twip ,距屏幕左边距 300 Twip 的地方。
6、Visible(可见)属性:
当一个对象的 Visible 属性设置为 False 时,程序运行时不能看见;只有当 Visible 属性值变为 True 时,才能被看见。
本属性虽然简单,但却是常常需要用到的,请大家牢记在心。
三、窗体的主要事件:
1、Load(装入)事件:
窗体最主要的事件,用来在启动程序时对属性和变量进行初始化。程序一旦运行,将自动触发本事件。
2、UnLoad(卸载)事件:
既然有装入事件,自然就有卸载事件,它的作用是从内存中清除一个窗体。卸载后如果要重新装入窗体,那么新装入的窗体上的所有控件都需要重新初始化。
3、Click(单击)与 DblClick(双击)事件:
在以前的学习中,我们已经接触到了 Click 事件,实际上,对一个严谨的程序来说,这种应用不是很普遍,大家知道就行了。
 

 

附件
    关闭窗口
    打印文档