InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
该函数返回一个字符串表达式,其参数含义为:(“[]”表示可缺省)
prompt――字符串表达式,最大长度为1024字符,窗体上的提示部分。
Title――字符串表达式,显示标题栏里的文本。
Default――字符串表达式,窗体中文本框的缺省值。
xpos,ypos――数值表达式,以Twips为单位指定窗体出现在屏幕上的位置。
helpfile――字符串表达式,是帮助文件的完整路径。
Context――数值表达式,指定适合的帮助主题。
可能你看了上面的说明并不明白,那么下面我们就用Input语句完成一个最简单的程序。
小知识:屏幕坐标
在计算机的屏幕上也有一个类似于我们在中学里常用到的直角坐标系,之不过它的原点不在左下,而是在屏幕的右上角,屏幕的最右上方坐标为(0,0),它的横坐标和我们的习惯是一致的,而纵坐标则是越向下越大,不仅是屏幕,所有的对象里都是一样,需要记清。见图6-1:

新建一个项目(project),在Form_load里填写一行代码:
a$ = InputBox("举荐你最欣赏的网站", "最佳网站投票", "VB小驿")’不算无耻吧?:->
按下F5运行程序,在Form1出现之前先会弹出一个输入对话框,如图6-2。这时,无论你按下OK还是Cancel都是没有区别的,因为我们并没有对输入数据进行处理,下面我们完成一个更加复杂些的程序。

新建一个项目文件,把窗口布局成类似于图6-3的结构,各对象属性如下表:

|
Form1 |
Caption “最佳网站投票演示” BorderStyle 3’不可调整大小 ControlBox 0’False |
|
Frame1 |
Caption “输入框属性“ |
|
Label1 |
Autosize 1’True Index 0至5 0至5 Caption “提示语句” “标题” “缺省网站” “X坐标” “Y坐标” “” Index 4 Enabled False Index 4 Enabled False |
|
Text1 |
Text “”’(空字符串) Index 0至4 Index 3 Text 0 Index 4 Text 0 |
|
Check1 |
Caption “指定输入框位置” |
|
Button1 |
Index 0,1 Index 0 Caption “显示输入框” 1 Caption “退出程序” |
本例中出现了一个Frame1控件,它是一种框架,可以用来把窗体分成好几个部分,首先应该在窗体上画出Frame1控件,然后再选择相应的控件,在Frame1上描出轮廓,使其是出现在Frame1之上,本例中除去两个按钮,其余都在Frame1上面。本例中用到了几组控件数组,其创建方法是,在选定的点右键,选择Copy,再在窗体其他部位单击右键,选择Paste即可,注意,若要使粘贴的对象在Frame1上,请在Frame1上单击右键选择Paste。
我们通过这个窗体,对输入框进行完整的控制,原理是这样的:当我们把窗体中要填写的对输入框的参数完成后按下OK按钮,就会出现我们设计的那个输入框,我们从输入框退出时则返回我们投票的结果,代码如下.
窗体初次被装入时,Label1(3)、Label(4)和Text1(3)、Text1(4)的Enabled属性都是False,我们需要通过改变Check1的Value(1,被选中,0,未选中)是他们有效或无效。 [NextPage]
声明全局变量(General):
Dim PosChk As Boolean '检查X、Y坐标是否有效
Check1_Click 事件:
Private Sub Check1_Click()
If Check1.Value = 1 Then
Label1(3).Enabled = True
Label1(4).Enabled = True
Text1(3).Enabled = True
Text1(4).Enabled = True
PosChk = True
Else
Label1(3).Enabled = False
Label1(4).Enabled = False
Text1(3).Enabled = False
Text1(4).Enabled = False
PosChk = False
End If
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 = "谢谢您的投票,您的选择是" & a$ & "!"
Case 1
Unload Me
End Select
End Sub
按下F5运行程序,你会看到这样的结果。图6-4,6-5。是不是有种受骗的感觉,啊哟哟,可不是我的错,就是这么容易嘛!


从刚才的例子里,我们接触了一些VB中的输入方法,其实数据输入不仅仅局限于向Text框中输入数据,数据的输入还有许多其他的方法,譬如前面的Check1也是向程序发出一定的信息,只要是通过操作向计算机发布命令就可以叫做输入,下面我们来一一介绍。
首先要介绍的当然是输入用到最多的Text框。Text没有Click事件,它的缺省事件是Change,也就是当Text框里的一旦内容改变就会激发该事件发生,还是让我们用实例说话吧。
Text有几个特殊的属性,一是MultiLine(多行)属性,MultiLine属性为False的时候,不论文本有多长,它都会在一行里显示下去,换行符无效,当它为True的时候,字符串显示到Text框边缘的时候就会自动换行。另一个与之配合的属性是ScrollBars属性,它有4个值,0到3,分别是没有滚动条,水平滚动条,垂直滚动条,和二者都有,它是一个只读属性,也就是说只有在程序设计过程中才能改变,而不能在程序运行中改变,但是我们可以通过API解决运行中改变的问题,我们放在以后再讲。PasswordChart属性,我们经常在程序操作中遇到要填写密码的部分,为了保密起见,在屏幕上显示的字符一般“*”表示,并且这时是无法用剪贴板的,这在VB中非常容易做到,把PasswordChart中设一个用来代替字符串的字符即可,并不一定是“*”哦。
[NextPage]
下面我们完成一个有趣的小程序,是我以前遇到过的一个程序,我对其进行了部分修改。程序的意思是这样的,假设你是一个司机应超速被警察扣留,现在需要你向警察陈述你的理由,如果你的话能打动他,就可以免交罚金,如果你在规定的字数里没有说出什么有震撼力的话,那老兄你可就惨了,交钱吧。J
这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者10%的免罚机会(有点无聊……L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图6-6)

|
Form1 |
Icon Stop图标 Caption 停车检查 BorderStyle 3 |
|
Label1 |
Caption 警官,我超速是有原因的,请听我说: 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 |
Visible False |
三个图片框Picture1-3的Picture属性分别为绿灯,黄灯和红灯,这些图标在VB目录下的Graphics\Icons\Traffic下(VB5),或是VB目录下的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,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。
下面我们来看看代码:
在General 里声明窗体级变量:
Dim Level As Integer
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Text1_Change()
Dim StrLength As Integer’字符串长度
Dim RandomNum As Single’随机数
Dim Str1 As String
Dim a As String
Dim i, Temp
StrLength = 0’每次开始时把字符串长度还原为0
a = Text1.Text
For i = 1 To Len(a)’Len(a)代表字符串的长度
Temp = Asc(Mid$(a, i, 1))’挨个取字符
If Temp > 255 Or Temp < 0 Then’不是ASC码
StrLength = StrLength + 2
Else
StrLength = StrLength + 1
[NextPage]
End If
Next i
StrLength = StrLength / 2
Select Case StrLength
Case 0 To 9
Picture1.Visible = True
Picture2.Visible = False
Picture3.Visible = False
Label2.Caption = "慢慢说。你还有" & Str(30 - StrLength) & "个字可以说"
Level = 1
Case 10 To 19
If Level = 1 Then
RandomNum = Rnd * 10’得到随机数
If RandomNum <= 10 And RandomNum > 9 Then
Text1.Enabled = False
Label2.Caption = "很抱歉这是个误会……"
Command1.Visible = True
Command1.Caption = "您可以离开了"
End If
Level = 2
Else
Picture1.Visible = False
Picture2.Visible = True
Picture3.Visible = False
Str1 = "怎么还没说完!"
Label2.Caption = Str1 & "你还有" & Str(30 - StrLength) & "个字可以说"
End If
Case 20 To 29
If Level = 2 Then
RandomNum = Rnd * 10
If RandomNum <= 10 And RandomNum > 9 Then
Text1.Enabled = False
Label2.Caption = "很抱歉这是个误会……"
Command1.Visible = True
Command1.Caption = "您可以离开了"
End If
Level = 3
Else
Picture1.Visible = False
Picture2.Visible = False
Picture3.Visible = True
Str1 = "我已经不耐烦了!"
Label2.Caption = Str1 & "你还有" & Str(30 - StrLength) & "个字可以说"
End If
Case Else
Text1.Enabled = False
Label2.Caption = "你已经没有机会了!"
Command1.Visible = True
Command1.Caption = "交钱吧,肇事犯!"
End Select
End Sub

中间有几个函数需要解释一下:
Mid可以从字符串中取出一部分,返回字符型,格式:
Mid(字符串,从第几个字符开始,取字符的长度)
Asc可以把字符转换为ASCII码,格式:
Asc(字符串)
Rnd,取得大于0但小于1 的数值,可以没有参数。
怎么样,十分简单吧,我们将在下一次继续讨论VB的输入机制,再见!
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|