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

[复制链接]
查看1877 | 回复3 | 2006-4-23 23:03:00 | 显示全部楼层 |阅读模式
输入(二)

  下面我们来看看代码:

在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

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的输入机制!

  在继续上面的内容时,我想再回顾和强调几个在字符串操作中经常函数:

  先是几个已经接触过的,Mid()Asc()Len(),它们的语法分别是:

Mid(字符型,起始字符,长度)

  返回子字符串,如果从字符串的第一个字符取起,起始字符为1,依此类推。

Asc(字符型)

  返回数值,如果参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符ASCII值。

Len(字符型)

  返回字符串的长度。

  下面我再为你解释几个新的函数:

Left(字符串,长度)

  将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是Right(),它将从字符串的最后一个字符向右取字符串。

Chr(数值型)

  该数值范围从0255,返回字符型,如Chr(65)可返回字符“A”,这样可以输入一些用键盘无法输入的字符。

Str(数值型)

  该函数把数值型转换为字符型,也许你觉得数值“123”和字符串“123”没什么区别,但在内存中一个ASCII字符是占一个字节,也就是说字符串“123”占3个字节,而当数值“123”是整型时,它占两个字符,当它是长整型时,占4个字节。与之向对应的是Val(数值型),它把数值型转换为字符型。

  上面的函数都是以后要经常用到的,请将它们熟悉。

  上次讲到文本框的用处,还有意思吗?你是否能把上次的程序稍稍变动一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。

  输入不仅仅是向文本框输入字符,凡是从外界向程序传递数据都可以叫做输入,我们一一说明白。

  无线钮,记得我们曾在第一章中完成过我们的第一个程序――“Hello World!”它就是一种输入的方法,在设计VB程序时可以通过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它因为很象无线电收音机上的按钮因而得名无线钮。如果要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。下面我们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让我们看看它们是如何工作的。

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

  程序窗体如图68,由于窗体比较简单,无需修改更多的属性,一共有三个文本框(Text13),分别用来显示输入字符,显示把空格换成星号的字符,和经过处理的字符,还有三个无线钮(Option13),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。因为空格在我们在文本框中无法看到空格,所以我们通过一个称作AddStar的函数把原有字符串中的空格转换为星号,使我们能够看到函数的效果。下面在程序中添加代码,首先在General中声明窗体级变量:

Dim LTrimmedword$, RTrimmedword$ 删除左边空格和右边空格后的字符串

Dim LRTrimmedword$ 删除两边空格后的字符串

  然后,我们通过一个叫做addstar的函数为字符串加上星号,以前曾说过函数与过程的分别,函数会返回一个函数值,所以addstar也就相当于一个变量,其实这很好理解,就象中学代数中的函数,函数就相当于变量Y,而函数中的参数则相当于自变量X,当然可能有很多自变量X1X2……请原谅,我并不想在这里上数学课,因为我厌恶那玩意儿,特别是上了大学之后,好在大二以后就再也不会有数学课了,哈哈……

Function addstar(tempword As String) As String

Dim charindex%
Dim pasteword$
加星号后的字符串
For charindex = 1 To Len(tempword)

If Mid(tempword, charindex, 1) = \" \" Then 如果字符为空格

pasteword = pasteword + \"*\"

Else: pasteword = pasteword + Mid(tempword, charindex, 1)
End If

Next
addstar = pasteword
返回函数值

End Function

  下面的代码很简单,并且我为它做了注释,就不再一一解释了,我只想简要的提几句,LtrimRtrim只有一个参数(字符型),另外下面用到了焦点事件,我们曾在第三章中介绍过,当Text1得到焦点(GotFocus)时,清空所有的文本框,当它失去焦点(LostFocus)时,对字符进行addstar并且在Text2中显示。

Private Sub Text1_GotFocus() 但焦点于Text1

清除所有文本框中的字符
Text1.Text = \"\"
Text2.Text = \"\"
Text3.Text = \"\"

End Sub

 

Private Sub Text1_LostFocus()

Dim Origionword As String
Origionword = Text1.Text
Text2.Text = addstar(Origionword)
LTrimmedword = addstar(LTrim(Origionword))
RTrimmedword = addstar(RTrim(Origionword))
LRTrimmedword = LTrim(RTrim(Origionword))

End Sub

 

Private Sub Option1_Click()

Text3.Text = LTrimmedword 显示删除左空格后的字符串

End Sub

 

Private Sub Option2_Click()

Text3.Text = RTrimmedword 显示删除右空格后的字符串

End Sub

 

Private Sub Option3_Click()

Text3.Text = LRTrimmedword 显示删除两边空格后的字符串

End Sub

最后结果如图69

  与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则可以有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你以前的职业时可以有学生、程序员、家庭教师或者什么,总之有很多选择,下面我们举一个简单的例子加以说明。

  假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机情况,你就需要一个调查表,为了使这个调查表不止枯燥,可以在这个程序中加入一些图形。新建一个项目文件,窗体布局如图610

  程序很简单,一共有两个框架(Frame1Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4Enabled属性改为False,使其无效;在Frame2中放置四个图片框(Picture1Picture4)与四个检查框向对应,请把所有图片框的BorderStyle属性设为0(无边框),它们的Picture属性请根据上图,在存放图标的目录中找到相对的图标。下面是程序代码:

Private Sub Check1_Click()

If Check1.Value Then

Check4.Enabled = -1
Picture1.Visible = -1

Else: Check4.Enabled = 0
Picture1.Visible = 0
Check4.Value = 0
Picture4.Visible = 0

End If

End Sub

 

Private Sub Check2_Click()

If Check2.Value Then

Picture2.Visible = -1

Else: Picture2.Visible = 0

End If

End Sub

 

Private Sub Check3_Click()

If Check3.Value Then

Picture3.Visible = -1

Else: Picture3.Visible = 0

End If

End Sub

 

Private Sub Check4_Click()

If Check4.Value Then

Picture4.Visible = -1

Else: Picture4.Visible = 0

End If

End Sub

这个程序比我们见过的任何程序都简单,就不再做说明。

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

本版积分规则