VB入门教程-第七章 输入(一)

[复制链接]
查看2309 | 回复4 | 2006-4-23 22:59:00 | 显示全部楼层 |阅读模式

第六章 输入(一)

  我们为什么要设计计算机程序呢,当然是为了计算机能为我们完成工作,但是要完成不同的任务,我们就必须对计算机下达命令,然后计算机在把信息返馈回来――任务是否完成。以上就是所谓的人机对话或交互功能,尤其是在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

loveplc | 2006-4-23 23:00:00 | 显示全部楼层

接着在按钮中填写代码:

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 &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,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。

zjl1031 | 2006-5-30 15:36:00 | 显示全部楼层
谢谢楼主
xuliang987 | 2007-5-16 20:15:00 | 显示全部楼层
学习中
jinxiu | 2007-10-21 17:11:00 | 显示全部楼层
学习中
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则