VB输入.docx
《VB输入.docx》由会员分享,可在线阅读,更多相关《VB输入.docx(15页珍藏版)》请在冰豆网上搜索。
![VB输入.docx](https://file1.bdocx.com/fileroot1/2022-11/29/b964d3df-5213-4ea9-8136-4fe487c9ac7e/b964d3df-5213-4ea9-8136-4fe487c9ac7e1.gif)
VB输入
第六章 输入
(二)
下面我们来看看代码:
在General里声明窗体级变量:
DimLevelAsInteger
PrivateSubCommand1_Click()
UnloadMe
EndSub
PrivateSubText1_Change()
DimStrLengthAsInteger’字符串长度
DimRandomNumAsSingle’随机数
DimStr1AsString
DimaAsString
Dimi,Temp
StrLength=0’每次开始时把字符串长度还原为0
a=Text1.Text
Fori=1ToLen(a)’Len(a)代表字符串的长度
Temp=Asc(Mid$(a,i,1))’挨个取字符
IfTemp>255OrTemp<0Then’不是ASC码
StrLength=StrLength+2
Else
StrLength=StrLength+1
EndIf
Nexti
StrLength=StrLength/2
SelectCaseStrLength
Case0To9
Picture1.Visible=True
Picture2.Visible=False
Picture3.Visible=False
Label2.Caption="慢慢说。
你还有"&Str(30-StrLength)&"个字可以说"
Level=1
Case10To19
IfLevel=1Then
RandomNum=Rnd*10’得到随机数
IfRandomNum<=10AndRandomNum>9Then
Text1.Enabled=False
Label2.Caption="很抱歉这是个误会……"
Command1.Visible=True
Command1.Caption="您可以离开了"
EndIf
Level=2
Else
Picture1.Visible=False
Picture2.Visible=True
Picture3.Visible=False
Str1="怎么还没说完!
"
Label2.Caption=Str1&"你还有"&Str(30-StrLength)&"个字可以说"
EndIf
Case20To29
IfLevel=2Then
RandomNum=Rnd*10
IfRandomNum<=10AndRandomNum>9Then
Text1.Enabled=False
Label2.Caption="很抱歉这是个误会……"
Command1.Visible=True
Command1.Caption="您可以离开了"
EndIf
Level=3
Else
Picture1.Visible=False
Picture2.Visible=False
Picture3.Visible=True
Str1="我已经不耐烦了!
"
Label2.Caption=Str1&"你还有"&Str(30-StrLength)&"个字可以说"
EndIf
CaseElse
Text1.Enabled=False
Label2.Caption="你已经没有机会了!
"
Command1.Visible=True
Command1.Caption="交钱吧,肇事犯!
"
EndSelect
EndSub
中间有几个函数需要解释一下:
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(数值型),它把数值型转换为字符型。
上面的函数都是以后要经常用到的,请将它们熟悉。
上次讲到文本框的用处,还有意思吗?
你是否能把上次的程序稍稍变动一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。
输入不仅仅是向文本框输入字符,凡是从外界向程序传递数据都可以叫做输入,我们一一说明白。
无线钮,记得我们曾在第一章中完成过我们的第一个程序――“HelloWorld!
”它就是一种输入的方法,在设计VB程序时可以通过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。
它因为很象无线电收音机上的按钮因而得名无线钮。
如果要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。
下面我们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()和Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让我们看看它们是如何工作的。
程序窗体如图6-8,由于窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1到3),分别用来显示输入字符,显示把空格换成星号的字符,和经过处理的字符,还有三个无线钮(Option1到3),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。
因为空格在我们在文本框中无法看到空格,所以我们通过一个称作AddStar的函数把原有字符串中的空格转换为星号,使我们能够看到函数的效果。
下面在程序中添加代码,首先在General中声明窗体级变量:
DimLTrimmedword$,RTrimmedword$'删除左边空格和右边空格后的字符串
DimLRTrimmedword$'删除两边空格后的字符串
然后,我们通过一个叫做addstar的函数为字符串加上星号,以前曾说过函数与过程的分别,函数会返回一个函数值,所以addstar也就相当于一个变量,其实这很好理解,就象中学代数中的函数,函数就相当于变量Y,而函数中的参数则相当于自变量X,当然可能有很多自变量X1、X2……请原谅,我并不想在这里上数学课,因为我厌恶那玩意儿,特别是上了大学之后,好在大二以后就再也不会有数学课了,哈哈……
Functionaddstar(tempwordAsString)AsString
Dimcharindex%
Dimpasteword$'加星号后的字符串
Forcharindex=1ToLen(tempword)
IfMid(tempword,charindex,1)=""Then'如果字符为空格
pasteword=pasteword+"*"
Else:
pasteword=pasteword+Mid(tempword,charindex,1)
EndIf
Next
addstar=pasteword'返回函数值
EndFunction
下面的代码很简单,并且我为它做了注释,就不再一一解释了,我只想简要的提几句,Ltrim和Rtrim只有一个参数(字符型),另外下面用到了焦点事件,我们曾在第三章中介绍过,当Text1得到焦点(GotFocus)时,清空所有的文本框,当它失去焦点(LostFocus)时,对字符进行addstar并且在Text2中显示。
PrivateSubText1_GotFocus()'但焦点于Text1
'清除所有文本框中的字符
Text1.Text=""
Text2.Text=""
Text3.Text=""
EndSub
PrivateSubText1_LostFocus()
DimOrigionwordAsString
Origionword=Text1.Text
Text2.Text=addstar(Origionword)
LTrimmedword=addstar(LTrim(Origionword))
RTrimmedword=addstar(RTrim(Origionword))
LRTrimmedword=LTrim(RTrim(Origionword))
EndSub
PrivateSubOption1_Click()
Text3.Text=LTrimmedword'显示删除左空格后的字符串
EndSub
PrivateSubOption2_Click()
Text3.Text=RTrimmedword'显示删除右空格后的字符串
EndSub
PrivateSubOption3_Click()
Text3.Text=LRTrimmedword'显示删除两边空格后的字符串
EndSub
最后结果如图6-9。
与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则可以有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你以前的职业时可以有学生、程序员、家庭教师或者什么,总之有很多选择,下面我们举一个简单的例子加以说明。
假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机情况,你就需要一个调查表,为了使这个调查表不止枯燥,可以在这个程序中加入一些图形。
新建一个项目文件,窗体布局如图6-10。
程序很简单,一共有两个框架(Frame1和Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1到Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4的Enabled属性改为False,使其无效;在Frame2中放置四个图片框(Picture1到Picture4)与四个检查框向对应,请把所有图片框的BorderStyle属性设为0(无边框),它们的Picture属性请根据上图,在存放图标的目录中找到相对的图标。
下面是程序代码:
PrivateSubCheck1_Click()
IfCheck1.ValueThen
Check4.Enabled=-1
Picture1.Visible=-1
Else:
Check4.Enabled=0
Picture1.Visible=0
Check4.Value=0
Picture4.Visible=0
EndIf
EndSub
PrivateSubCheck2_Click()
IfCheck2.ValueThen
Picture2.Visible=-1
Else:
Picture2.Visible=0
EndIf
EndSub
PrivateSubCheck3_Click()
IfCheck3.ValueThen
Picture3.Visible=-1
Else:
Picture3.Visible=0
EndIf
EndSub
PrivateSubCheck4_Click()
IfCheck4.ValueThen
Picture4.Visible=-1
Else:
Picture4.Visible=0
EndIf
EndSub
这个程序比我们见过的任何程序都简单,就不再做说明。
1.96-3
VB入门教程之六
第六章 输入(三)
滚动条(ScrollBar)在视窗中也是一个不可缺少的部分,由于面积所限,我们不得把屏幕上的内容滚来滚去,以显示大量的内容,这就是我们经常要用到的滚动条。
但滚动条除去滚动窗口,还有一个很重要的作用――输入,想想你经常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音量就会增大,而你把它滑向小的一方音量就会减小,或者一个控制左右两个音箱的均衡器,当滑块在正中央的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在Windows操作中,我们也经常要用到类似的效果。
在VB中提供了两个常规的滚动条控件――Vscroll和Hscroll,分别代表垂直的和水平的滚动条,它们只不过是方向不同而已,而它们的属性,以及会发生的事件都是相同的。
,滚动条有几个特殊的属性:
Value属性,当滑块挪动后停在某一位置时,就改变了滚动条的Value属性。
Max和Min属性,用来设置滚动条的最大值和最小值,譬如把Max设为100,把Min设为0时,滚动条的Value就在0到100之间移动,当Max和Min倒置时,滚动条的方向也会相反,也就是说,当MaxMax和Min也可设为负值。
SmallChange和LargeChange属性,当鼠标在滚动条两头的箭头上单击时,就会把滚动条向相应的方向挪动一点,这时用到的就是SmallChange属性,当你把它设为1时,每点一下,滚动条的Value就改变1;当鼠标在滚动条上点击时,用到的就是LargeChange,当设为10时,每点击一下滚动条,Value就改变10。
下面我们看一个实例。
大家都知道,物体之所以会有颜色是因为物体表面的材料吸收了太阳光中的部分色光,而还有部分色光没被吸收而被反射回来,它就成了我们看到的颜色,黑色就是物体吸收了所有的太阳光的所有色光,没有反射颜色,所以在我们看来是黑的,而当物体反射了所有的色光,我们看到的就是白色。
在计算机中,颜色的表示就是象我们刚才描述的样子,它把颜色分为红(R)、绿(G)和蓝(B)。
众所周知,计算机的机器语言是使用二进制表示的,为了方便查阅我们看到的往往是十六进制代码,一个字节包括两位十六进制数字,从0-255(十六进制表示0-FF),而一个字节是由八位二进制数值表示(2^8,2的8次方),计算机中用分别用一个字节,也就是八位表示一种颜色,和在一起也就是三个字节(24位)表示所有的颜色,这就是我们平时常说的24位真彩,它一共可以组成256×256×256(2^24)种颜色,对于我们的肉眼,是根本分辨不出来相邻两个不同的颜色的,比如用FFFFFF表示白色,就好象我们刚才说的物体反射了所有的色光,相反的可以用000000表示黑色,它吸收了所有的色光,还可以用FF0000表示红色,在HTML语言中就是这样表示颜色的。
小知识:
现在你可以根据你的显卡的显存来计算一下显卡在24位真彩下可以以多大的分辨率显示,计算是这样的,用显存的字节数÷3(24位色)=显示器宽的象素数×显示器高的象素数,宽的象素数:
高的象素数=4:
3,比如4兆显存,就应该是4×1024×1024÷3=1365×1024。
在下面的小程序中,我们通过三个滚动条分别代表R、G、B,滚动滚动条,将在右边的图片框中显示相应的颜色,并且在下面的文本框中显示颜色的十六进制数值。
现在,新建一个项目文件,在Form1中如图6-12布局控件,各控件属性如下表:
HsrollBar
NameHscroll1
Index0、1、2
(共同属性)
Max255
Min0
LargeChange10
SmallChange1
Label
NameLabel1
Index0、1、2
Index0Caption“红:
”
Index1Caption“绿:
”
Index2Caption“蓝:
”
Label
NameLabel2
Caption“颜色值”
TextBox
NameText1
Text“”
PictureBox
NamePicuture1
为了把十进制数值换成十六进制数值,要使用一个叫做Hex()的函数,它把十进制数值转化为十六进制的字符,但对于只有一位的十六进制字符,这个函数并不在高位补零,为了视觉上的正确,我设计了一个小函数帮助它给一位的十六进制字符补零.
程序代码很简单,见下:
DimRedStr,GreenStr,BlueStrAsString’RGB的字符
DimRedNum,GreenNum,BlueNumAsInteger’RGB的数值
FunctionGetColorValue()AsString
‘获得输入值
RedNum=HScroll1(0).Value
GreenNum=HScroll1
(1).Value
BlueNum=HScroll1
(2).Value
RedStr=Hex(RedNum)
IfLen(RedStr)<2ThenRedStr="0"+RedStr’补零
GreenStr=Hex(GreenNum)
IfLen(GreenStr)<2ThenGreenStr="0"+GreenStr
BlueStr=Hex(BlueNum)
IfLen(BlueStr)<2ThenBlueStr="0"+BlueStr
GetColorValue=RedStr+GreenStr+BlueStr’合并
EndFunction
PrivateSubForm_Load()
‘初始化程序
Text1.Text=GetColorValue
Picture1.BackColor=RGB(RedNum,GreenNum,BlueNum)'RGB函数返回颜色值
EndSub
PrivateSubHScroll1_Change(IndexAsInteger)
‘当滚动条被改变时
Text1.Text=GetColorValue
Picture1.BackColor=RGB(RedNum,GreenNum,BlueNum)
EndSub
运行如图6-13。
列表框(ListBox)和复合列表框(ComboBox)也是我们经常见到的视窗元素,我们从它所列示的条目中选出所需的,两种列表框只是在外观上略有不同,但从本质和操作方法来说它们是很相象的,它们也有一些特殊的属性:
List属性,你可以利于该属性象列表框或复合列表框中添加条目,但也可以在程序设计中通过AddItem方法添加。
ListCount属性,返回列表框或复合列表框中条目的数目。
ListIndex属性,表示列表框或复合列表框的第几项条目。
(从0到ListCount-1)
Sorted属性,可以通过该属性对列表框或复合列表框中的条目根据字母顺序排序。
MultiSelect属性,0表示不能多选,1表示简单多选,2表示宽展多选,仅限于列表框。
Columns属性,表示条目是以一列显示还是两列显示,仅限于列表框。
Style属性:
表示列表框或复合列表框以何种风格显示,二者参数不同。
举两个简单的例子。
例子一,建立一个新项目文件,在Form1上添加一个List控件,调整适当的尺寸,无需改变任何属性。
填写以下代码。
PrivateSubForm_Load()
WithList1
.AddItem"0-Default"
.AddItem"1-Arrow"
.AddItem"2-Cross"
.AddItem"3-I-Beam"
.AddItem"4-Icon"
.AddItem"5-Size"
.AddItem"6-SizeNESW"
.AddItem"7-SizeNS"
.AddItem"8-SizeNWSE"
.AddItem"9-SizeWE"
.AddItem"10-UpArrow"
.AddItem"11-Hourglass"
.AddItem"12-NoDrag"
.AddItem"13-ArrowAndHourglass"
.AddItem"14-ArrowAndQuestion"
.AddItem"15-SizeAll"
EndWith
EndSub
PrivateSubList1_Click()
MousePointer=List1.ListIndex’这里的MousePointer是窗体全局内的属性
EndSub
当你点在不同项上面鼠标指针也会随着改变,如图6-14。
AddItem方法语法如下:
ListObject“字符串”,数值
字符串后的数值可以指定条目加入在第几个条目的位置上,如果没有的话,添加项将逐次排下去。
下面举一个复合列表框的例子,例子通过选择复合列表框中的选项来改变文本框的字体。
请新建一个项目文件,在窗体中添加一个ComboBox(Combo1)和一个TextBox(Text1),添加如下代码。
PrivateSubCombo1_Click()
Text1.FontName=Combo1.List(Combo1.ListIndex)
EndSub
PrivateSubForm_Load()
WithCombo1
.AddItem"宋体"
.AddItem"隶书"
.AddItem"黑体"
.AddItem"楷体"
.ListIndex=0'把第一个条目作为初始项
EndWith
Text1.FontSize=30’放大字体
Text1.FontName=Combo1.List(0)’初始字体为“宋体”
EndSub
如图6-15。
(第六章完)