-
vb.net教程之输入(二)
输入(二)
下面我们来看看代码:
在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 =
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 *
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
{C}{C}
中间有几个函数需要解释一下:
Mid可以从字符串中取出一部分,返回字符型,格式:
Mid(字符串,从第几个字符开始,取字符的长度)
Asc可以把字符转换为ASCII码,格式:
Asc(字符串)
Rnd,取得大于0但小于1 的数值,可以没有参数。
怎么样,十分简单吧,我们将在下一次继续讨论VB的输入机制!
在继续上面的内容时,我想再回顾和强调几个在字符串操作中经常函数:
先是几个已经接触过的,Mid(),Asc(),Len(),它们的语法分别是:
Mid(字符型,起始字符,长度)
返回子字符串,如果从字符串的第一个字符取起,起始字符为1,依此类推。
Asc(字符型)
返回数值,如果参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符ASCII值。
Len(字符型)
返回字符串的长度。
下面我再为你解释几个新的函数:
Left(字符串,长度)
将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是Right(),它将从字符串的最后一个字符向右取字符串。
Chr(数值型)
该数值范围从0-255,返回字符型,如Chr(65)可返回字符“A”,这样可以输入一些用键盘无法输入的字符。
Str(数值型)
该函数把数值型转换为字符型,也许你觉得数值“123”和字符串“123”没什么区别,但在内存中一个ASCII字符是占一个字节,也就是说字符串“123”占3个字节,而当数值“123”是整型时,它占两个字符,当它是长整型时,占4个字节。与之向对应的是Val(数值型),它把数值型转换为字符型。
上面的函数都是以后要经常用到的,请将它们熟悉。
上次讲到文本框的用处,还有意思吗?你是否能把上次的程序稍稍变动一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。
输入不仅仅是向文本框输入字符,凡是从外界向程序传递数据都可以叫做输入,我们一一说明白。
无线钮,记得我们曾在第一章中完成过我们的第一个程序――“Hello World!”它就是一种输入的方法,在设计VB程序时可以通过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它因为很象无线电收音机上的按钮因而得名无线钮。如果要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。下面我们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()和Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让我们看看它们是如何工作的。
{C}{C}
程序窗体如图6-8,由于窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1到3),分别用来显示输入字符,显示把空格换成星号的字符,和经过处理的字符,还有三个无线钮(Option1到3),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。因为空格在我们在文本框中无法看到空格,所以我们通过一个称作AddStar的函数把原有字符串中的空格转换为星号,使我们能够看到函数的效果。下面在程序中添加代码,首先在General中声明窗体级变量:
Dim LTrimmedword$, RTrimmedword$ '删除左边空格和右边空格后的字符串
Dim LRTrimmedword$ '删除两边空格后的字符串
然后,我们通过一个叫做addstar的函数为字符串加上星号,以前曾说过函数与过程的分别,函数会返回一个函数值,所以addstar也就相当于一个变量,其实这很好理解,就象中学代数中的函数,函数就相当于变量Y,而函数中的参数则相当于自变量X,当然可能有很多自变量X1、X2……请原谅,我并不想在这里上数学课,因为我厌恶那玩意儿,特别是上了大学之后,好在大二以后就再也不会有数学课了,哈哈……
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
下面的代码很简单,并且我为它做了注释,就不再一一解释了,我只想简要的提几句,Ltrim和Rtrim只有一个参数(字符型),另外下面用到了焦点事件,我们曾在第三章中介绍过,当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
最后结果如图6-9。
{C}{C}
与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则可以有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你以前的职业时可以有学生、程序员、家庭教师或者什么,总之有很多选择,下面我们举一个简单的例子加以说明。
假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机情况,你就需要一个调查表,为了使这个调查表不止枯燥,可以在这个程序中加入一些图形。新建一个项目文件,窗体布局如图6-10。
{C}{C}
程序很简单,一共有两个框架(Frame1和Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1到Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4的Enabled属性改为False,使其无效;在Frame2中放置四个图片框(Picture1到Picture4)与四个检查框向对应,请把所有图片框的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
{C}{C}
这个程序比我们见过的任何程序都简单,就不再做说明。