1输出
上一章里,我们讨论的VB的输人机制,这次我们来集中讨论VB中信息的输出。
输入和输出是不可分割的,人们输入的最终目的是希望计算机作出反应,任何一个程序都不可能避开这个问题,所以就算要完成一个最基本的程序,也要有输出的部分,复杂的程序更是如此。
在输入的一章里,我们学习的第一个输入方法是InputBox,相应的在输出中我们第一个要接触的是MsgBox(Message
Box),和InputBox相似,MsgBox也是简化了的窗体,可以以函数的形式返回操作。它的基本语法是:
MsgBox "显示内容",按钮值,"标题"
通过这个函数可以产生一个标准的Windows消息框,象我们平时经常接触的“Yes/No”、“OK/Cancel”,“Retry/Abort/Ignore”等等,这些都是在按钮值中设定的,按钮值如下:
数值
|
含义
|
0
|
OK
|
1
|
OK和Cancel
|
2
|
Abort、Retry和Ignore
|
3
|
Yes、No和Cancel
|
4
|
Yes和No
|
5
|
Retry和Cancel
|
并且不同的消息可以搭配不同的图标,比如帮助文件用问号,一般提示用一个圈里一个I等等,它们也是按钮值的一部分:
数值
|
含义
|
16
|
表示危险
|
32
|
表示问号
|
48
|
表示警告
|
64
|
表示信息
|
但是如何既显示按钮也显示相应的图标呢,请看一会儿下面的例子。前面说过,MsgBox是函数,那么它就会有返回值,当你按下某个按钮就会返回一个数值,以便对用户不同动作的捕捉,返回值如下:
数值
|
含义
|
1
|
OK
|
2
|
Cancel
|
3
|
Abort
|
4
|
Retry
|
5
|
Ignore
|
6
|
Yes
|
7
|
No
|
说了这么多,可能你已经不知所措了,不过看过下面的例子后,相信一切都会迎刃而解。

首先建立一个新项目文件,并添加以下对象(见图7-1)――一个Button(Command1),两个ComboBox(Combo1和Combo2),不要对其属性做更多的修改,只需把Command1的Caption改为“Click
Me”。这个程序的目的是自由组合上面的按钮值,以显示各种消息框,并且返回按下的按钮,Combo1和Combo2分别用来选择按钮值,首先在Form_Load中初始化程序:
Private
Sub Form_Load()
Combo1.AddItem
"OK"
Combo1.AddItem
"OK and Cancel"
Combo1.AddItem
"Abort,Retry and Ignore"
Combo1.AddItem
"Yes,No,Cancel"
Combo1.AddItem
"Yes,No"
Combo1.AddItem
"Retry,Cancel"
Combo1.ListIndex
= 0
Combo2.AddItem
"危险"
Combo2.AddItem
"询问"
Combo2.AddItem
"警告"
Combo2.AddItem
"信息"
Combo2.ListIndex
= 0
End
Sub
ComboBox的用法已经在上一章中讨论过,在此不再赘述,ListIndex属性用来把第一个元素放在选择位置。
但是如何显示需要的按钮和图标呢?很简单,只需把它们相加,比如说要显示OK、Cancel按钮和警告的图标,只需把1和48相加,得到49即可,于是我们在Command1中填写这样一行:
Private
Sub Command1_Click()
message
= MsgBox("显示" &
Combo1.List(Combo1.ListIndex) & "和"
& Combo2.List(Combo2.ListIndex), Combo1.ListIndex +
(Combo2.ListIndex + 1) * 16, "消息演示")
End
Sub
因为图标值是从16开始的所以要把Combo2的ListIndex加1再乘以16。
小知识:按钮值并非简单的相加
按钮值并非简单的相加,我们知道,在计算机里最终的语言是机器语言,而机器语言是以0和1的二进制表示的,在这里用到的实际上不是相加,而是逻辑操作符“OR”,你知道OR和AND是怎样工作的吗?正如你所知,True
And False得到False,而True
Or False得到True,这是怎么形成的呢?我们有时也用0代表False,用1或-1代表True(其实,只要非零都可以代表True),而0和1在二进制中还是本身,于是True、False的运算就变成的0
和1的运算,我们可以把And叫做补0运算,把Or叫做补1运算,当用And处理两个二进制数的时候,它们逐位比较,如果相同的位上都是0或都是1则没有变化,而如果一位上是0,另一位上是1,最后结果上相应的位上就变成0。比如1010(十进制中10)And
1101(十进制中13),最后就得1000(十进制中8),相同的Or亦是如此,只不过在不同的地方补1。在位数不同时,前面补0,你可以在VB中试试看。但为什么要讲这些呢,原因是我不想让大家真的以为这个例子中就是相加,只不过碰巧它们的0和1处在不同的位置上,并且这个小知识在今后的位图操作和API操作中很有用处。
下面在来判断用户按下的按钮。
Private
Sub Command1_Click()
message
= MsgBox("显示" &
Combo1.List(Combo1.ListIndex) & "和"
& Combo2.List(Combo2.ListIndex), Combo1.ListIndex +
(Combo2.ListIndex + 1) * 16, "消息演示")
Select
Case message
Case
1
MsgBox
"你按下了OK钮"
Case
2
MsgBox
"你按下了Cancel按钮"
Case
3
MsgBox
"你按下了Abort按钮"
Case
4
MsgBox
"你按下了Retry按钮"
Case
5
MsgBox
"你按下了Ignore按钮"
Case
6
MsgBox
"你按下了Yes按钮"
Case
7
MsgBox
"你按下了No按钮"
End
Select
End
Sub
运行程序,结果如图7-2,7-3。

|