|
楼主 |
发表于 2008-7-21 12:32:07
|
显示全部楼层
来自 福建省福州市平潭县
第六章 输入(一)
我们为什么要设计计算机程序呢,当然是为了计算机能为我们完成工作,但是要完成不同的任务,我们就必须对计算机下达命令,然后计算机在把信息返馈回来――任务是否完成。以上就是所谓的人机对话或交互功能,尤其是在Windows操作里我们需要进行更多的输入工作,我们需要填写各种各样的表格,设置程序的重要参数,把数据输入给计算机,再又它完成既定的工作就是今天我们本章要重点讨论的问题――在VB中如何建立完整的输入机制。
在VB中提供了一个函数InputBox能帮助我们建立一个最简单的输入窗体,语法如下:
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,未选中)是他们有效或无效。
声明全局变量(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中设一个用来代替字符串的字符即可,并不一定是“*”哦。
下面我们完成一个有趣的小程序,是我以前遇到过的一个程序,我对其进行了部分修改。程序的意思是这样的,假设你是一个司机应超速被警察扣留,现在需要你向警察陈述你的理由,如果你的话能打动他,就可以免交罚金,如果你在规定的字数里没有说出什么有震撼力的话,那老兄你可就惨了,交钱吧。J
这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者10%的免罚机会(有点无聊……L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图6-6)
Form1
Icon Stop图标
Caption 停车检查
BorderStyle 3
Label1
Caption 警官,我超速是有原因的,请听我说:
BackColor &H008****8080&
ForeColor &H800****0012&
Label2
Caption 你必须在30字之内完成你理由的申诉,否则将受到罚款!
BackColor &H008****8080&
ForeColor &H00FF0000&
Text1
MultiLink True
Text “”
Picture1
Autosize True
BackColor &H008****8080&
Visible True
Picture2
Autosize True
BackColor &H008****8080&
Visible False
Picture3
Autosize True
BackColor &H008****8080&
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,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。
第六章第二部分 |
|