End Sub
接着在按钮中填写代码:
Private Sub Command1_Click(Index As Integer) Dim Prompt, Title, Default As String Dim xPos, yPos As Integer Select Case Index Case 0
Prompt = Text1(0).Text Title = Text1(1).Text Default = Text1(2).Text If PosChk Then
xPos = Val(Text1(3).Text) yPos = Val(Text1(4).Text)
a$ = InputBox(Prompt, Title, Default, xPos, yPos) Else
a$ = InputBox(Prompt, Title, Default, xPos, yPos) End If
Label1(5).Caption = \谢谢您的投票,您的选择是\!\Case 1 Unload Me End Select End Sub
按下F5运行程序,你会看到这样的结果。图6-4,6-5。是不是有种受骗的感觉,啊哟哟,可不是我的错,就是这么容易嘛!
41
从刚才的例子里,我们接触了一些VB中的输入方法,其实数据输入不仅仅局限于向Text框中输入数据,数据的输入还有许多其他的方法,譬如前面的Check1也是向程序发出一定的信息,只要是通过操作向计算机发布命令就可以叫做输入,下面我们来一一介绍。
首先要介绍的当然是输入用到最多的Text框。Text没有Click事件,它的缺省事件是Change,也就是当Text框里的一旦内容改变就会激发该事件发生,还是让我们用实例说话吧。
Text有几个特殊的属性,一是MultiLine(多行)属性,MultiLine属性为False的时候,不论文本有多长,它都会在一行里显示下去,换行符无效,当它为True的时候,字符串显示到Text框边缘的时候就会自动换行。另一个与之配合的属性是ScrollBars属性,它有4个值,0到3,分别是没有滚动条,水平滚动条,垂直滚动条,和二者都有,它是一个只读属性,也就是说只有在程序设计过程中才能改变,而不能在程序运行中改变,但是我们可以通过API解决运行中改变的问题,我们放在以后再讲。PasswordChart属性,我们经常在程序操作中遇到要填写密码的部分,为了
42
保密起见,在屏幕上显示的字符一般“*”表示,并且这时是无法用剪贴板的,这在VB中非常容易做到,把PasswordChart中设一个用来代替字符串的字符即可,并不一定是“*”哦。
下面我们完成一个有趣的小程序,是我以前遇到过的一个程序,我对其进行了部分修改。程序的意思是这样的,假设你是一个司机应超速被警察扣留,现在需要你向警察陈述你的理由,如果你的话能打动他,就可以免交罚金,如果你在规定的字数里没有说出什么有震撼力的话,那老兄你可就惨了,交钱吧。J
这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者10%的免罚机会(有点无聊??L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图6-6)
Form1 Icon Stop图标 Caption 停车检查 BorderStyle 3 Label1 Caption 警官,我超速是有原因的,请听我说: 43
BackColor &H00808080& ForeColor &H80000012& Label2 Caption 你必须在30字之内完成你理由的申诉,否则将受到罚款! BackColor &H00808080& ForeColor &H00FF0000& Text1 MultiLink True Text “” Picture1 Autosize True BackColor &H00808080& Visible True Picture2 Autosize True BackColor &H00808080& Visible False Picture3 Autosize True BackColor &H00808080& Visible False Command1
三个图片框Picture1-3的Picture属性分别为绿灯,黄灯和红灯,这些图标在VB目录下的Graphics\\Icons\\Traffic下(VB5),或是VB目
44
Visible False
录下的Icons\\Traffic下(VB4、VB3),你还可以为Label1在Font属性里选一个合适的字体和字重。下面我们来看代码: 首先初始化程序: Private Sub Form_Load() '把Command1放在水平的中央 Command1.Top = Label2.Top+200
Command1.Left = (Form1.Width - Command1.Width) / 2 '重叠三个图片框
Picture2.Left = Picture1.Left Picture2.Top = Picture1.Top Picture3.Left = Picture1.Left Picture3.Top = Picture1.Top End Sub
下面我来讲一讲程序是怎样运行的,我们将用到Text的Change事件,每当字符串改变一次就对它进行一次检查,算出已经说的字数,当字数超过10时,下面的红绿灯会变成黄色,并且在这时随机抽取一个数,它在一个范围内出现的可能是10%,如果在这个范围内就可以免交罚金,如果不在范围则继续,当文字超过20的时候,红绿灯会变成红色,再一次抽取随机数字,步骤同上,如果30个字已满,再进行一次检查,如果你真的那么不幸就该罚款了。
程序的步骤清楚了,我们在来看看程序的要点。由于中文是双字节字符,也就是说一个汉字占两个ASC码的位置,而VB显然是为英语国家设计的用Len函数无法返回汉字字节,也就是说一个汉字和和一个ASC字符在Len函数中得到的值是一样的,这就需要特殊处理。用Asc()函数,在括号内放入一个ASC字符或字符串,它会把第一个ASC码转化为0-255的数值,而把一个汉字放入,它的值必然不在0-255,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。
第六章 输入(二)
45