VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之输入(三)

输入(三)
  滚动条(ScrollBar)在视窗中也是一个不可缺少的部分,由于面积所限,我们不得把屏幕上的内容滚来滚去,以显示大量的内容,这就是我们经常要用到的滚动条。但滚动条除去滚动窗口,还有一个很重要的作用――输入,想想你经常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音量就会增大,而你把它滑向小的一方音量就会减小,或者一个控制左右两个音箱的均衡器,当滑块在正中央的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在Windows操作中,我们也经常要用到类似的效果。
  在VB中提供了两个常规的滚动条控件――Vscroll和Hscroll,分别代表垂直的和水平的滚动条,它们只不过是方向不同而已,而它们的属性,以及会发生的事件都是相同的。,滚动条有几个特殊的属性:
Value属性,当滑块挪动后停在某一位置时,就改变了滚动条的Value属性。
Max和Min属性,用来设置滚动条的最大值和最小值,譬如把Max设为100,把Min设为0时,滚动条的Value就在0到100之间移动,当Max和Min倒置时,滚动条的方向也会相反,也就是说,当Max<Min时,原来Value增加的方向就会变成相反的方向。Max和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布局控件,各控件属性如下表:
0612.gif (3568 字节)
HsrollBar Name Hscroll1
Index 0、1、2
(共同属性)
Max 255
Min 0
LargeChange 10
SmallChange 1
Label Name Label1
Index 0、1、2
Index 0 Caption “红:”
Index 1 Caption “绿:”
Index 2 Caption “蓝:”
Label Name Label2
Caption “颜色值”
TextBox Name Text1
Text “”
PictureBox Name Picuture1
 
为了把十进制数值换成十六进制数值,要使用一个叫做Hex()的函数,它把十进制数值转化为十六进制的字符,但对于只有一位的十六进制字符,这个函数并不在高位补零,为了视觉上的正确,我设计了一个小函数帮助它给一位的十六进制字符补零.
程序代码很简单,见下:
Dim RedStr, GreenStr, BlueStr As String’RGB的字符
Dim RedNum, GreenNum, BlueNum As Integer’RGB的数值
 
Function GetColorValue() As String
‘获得输入值
RedNum = HScroll1(0).Value
GreenNum = HScroll1(1).Value
BlueNum = HScroll1(2).Value
RedStr = Hex(RedNum)
If Len(RedStr) < 2 Then RedStr = "0" + RedStr’补零
GreenStr = Hex(GreenNum)
If Len(GreenStr) < 2 Then GreenStr = "0" + GreenStr
BlueStr = Hex(BlueNum)
If Len(BlueStr) < 2 Then BlueStr = "0" + BlueStr
GetColorValue = RedStr + GreenStr + BlueStr’合并
End Function
Private Sub Form_Load()
‘初始化程序
Text1.Text = GetColorValue
Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)'RGB函数返回颜色值
End Sub
 
Private Sub HScroll1_Change(Index As Integer)
‘当滚动条被改变时
Text1.Text = GetColorValue
Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)
End Sub
运行如图6-13。
0613.gif (3820 字节)
 
列表框(ListBox)和复合列表框(ComboBox)也是我们经常见到的视窗元素,我们从它所列示的条目中选出所需的,两种列表框只是在外观上略有不同,但从本质和操作方法来说它们是很相象的,它们也有一些特殊的属性:
List属性,你可以利于该属性象列表框或复合列表框中添加条目,但也可以在程序设计中通过AddItem方法添加。
ListCount属性,返回列表框或复合列表框中条目的数目。
ListIndex属性,表示列表框或复合列表框的第几项条目。(从0到ListCount-1)
Sorted属性,可以通过该属性对列表框或复合列表框中的条目根据字母顺序排序。
MultiSelect属性,0表示不能多选,1表示简单多选,2表示宽展多选,仅限于列表框。
Columns属性,表示条目是以一列显示还是两列显示,仅限于列表框。
Style属性:表示列表框或复合列表框以何种风格显示,二者参数不同。
举两个简单的例子。
例子一,建立一个新项目文件,在Form1上添加一个List控件,调整适当的尺寸,无需改变任何属性。填写以下代码。
Private Sub Form_Load()
With List1
.AddItem "0-Default"
.AddItem "1-Arrow"
.AddItem "2-Cross"
.AddItem "3-I-Beam"
.AddItem "4-Icon"
.AddItem "5-Size"
.AddItem "6-Size NE SW"
.AddItem "7-Size NS"
.AddItem "8-Size NW SE"
.AddItem "9-Size WE"
.AddItem "10-Up Arrow"
.AddItem "11-Hourglass"
.AddItem "12-NoDrag"
.AddItem "13-Arrow And Hourglass"
.AddItem "14-Arrow And Question"
.AddItem "15-Size All"
End With
End Sub
 
Private Sub List1_Click()
MousePointer = List1.ListIndex’这里的MousePointer是窗体全局内的属性
End Sub
当你点在不同项上面鼠标指针也会随着改变,如图6-14。
0614.gif (3321 字节)
AddItem方法语法如下:
ListObject “字符串”,数值
字符串后的数值可以指定条目加入在第几个条目的位置上,如果没有的话,添加项将逐次排下去。
下面举一个复合列表框的例子,例子通过选择复合列表框中的选项来改变文本框的字体。请新建一个项目文件,在窗体中添加一个ComboBox(Combo1)和一个TextBox(Text1),添加如下代码。
Private Sub Combo1_Click()
Text1.FontName = Combo1.List(Combo1.ListIndex)
End Sub
 
Private Sub Form_Load()
With Combo1
.AddItem "宋体"
.AddItem "隶书"
.AddItem "黑体"
.AddItem "楷体"
.ListIndex = 0'把第一个条目作为初始项
End With
Text1.FontSize = 30’放大字体
Text1.FontName = Combo1.List(0)’初始字体为“宋体”
End Sub
如图6-15。
0615.gif (2935 字节)
 
第七章 输出
  上一章里,我们讨论的VB的输人机制,这次我们来集中讨论VB中信息的输出。
  输入和输出是不可分割的,人们输入的最终目的是希望计算机作出反应,任何一个程序都不可能避开这个问题,所以就算要完成一个最基本的程序,也要有输出的部分,复杂的程序更是如此。
  在输入的一章里,我们学习的第一个输入方法是InputBox,相应的在输出中我们第一个要接触的是MsgBox(Message Box),和InputBox相似,MsgBox也是简化了的窗体,可以以函数的形式返回操作。它的基本语法是:
  MsgBox "显示内容",按钮值,"标题"
  通过这个函数可以产生一个标准的Windows消息框,象我们平时经常接触的“Yes/No”、“OK/Cancel”,“Retry/Abort/Ignore”等等,这些都是在按钮值中设定的,按钮值如下:
数值 含义
0 OK
1 OK和Cancel
2 Abort、Retry和Ignore
3 Yes、No和Cancel
4 Yes和No
5 Retry和Cancel
 
  并且不同的消息可以搭配不同的图标,比如帮助文件用问号,一般提示用一个圈里一个I等等,它们也是按钮值的一部分:
数值 含义
16 表示危险
32 表示问号
48 表示警告
64 表示信息
 
  但是如何既显示按钮也显示相应的图标呢,请看一会儿下面的例子。前面说过,MsgBox是函数,那么它就会有返回值,当你按下某个按钮就会返回一个数值,以便对用户不同动作的捕捉,返回值如下:
数值 含义
1 OK
2 Cancel
3 Abort
4 Retry
5 Ignore
6 Yes
7 No
  说了这么多,可能你已经不知所措了,不过看过下面的例子后,相信一切都会迎刃而解。
0701.gif (2365 字节)
  首先建立一个新项目文件,并添加以下对象(见图7-1)――一个Button(Command1),两个ComboBox(Combo1和Combo2),不要对其属性做更多的修改,只需把Command1的Caption改为“Click Me”。这个程序的目的是自由组合上面的按钮值,以显示各种消息框,并且返回按下的按钮,Combo1和Combo2分别用来选择按钮值,首先在Form_Load中初始化程序:
Private Sub Form_Load()
Combo1.AddItem "OK"
Combo1.AddItem "OK and Cancel"
Combo1.AddItem "Abort,Retry and Ignore"
Combo1.AddItem "Yes,No,Cancel"
Combo1.AddItem "Yes,No"
Combo1.AddItem "Retry,Cancel"
Combo1.ListIndex = 0
Combo2.AddItem "危险"
Combo2.AddItem "询问"
Combo2.AddItem "警告"
Combo2.AddItem "信息"
Combo2.ListIndex = 0
End Sub
ComboBox的用法已经在上一章中讨论过,在此不再赘述,ListIndex属性用来把第一个元素放在选择位置。
  但是如何显示需要的按钮和图标呢?很简单,只需把它们相加,比如说要显示OK、Cancel按钮和警告的图标,只需把1和48相加,得到49即可,于是我们在Command1中填写这样一行:
Private Sub Command1_Click()
message = MsgBox("显示" & Combo1.List(Combo1.ListIndex) & "和" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")
End Sub
因为图标值是从16开始的所以要把Combo2的ListIndex加1再乘以16。
小知识:按钮值并非简单的相加
按钮值并非简单的相加,我们知道,在计算机里最终的语言是机器语言,而机器语言是以0和1的二进制表示的,在这里用到的实际上不是相加,而是逻辑操作符“OR”,你知道OR和AND是怎样工作的吗?正如你所知,True And False得到False,而True Or False得到True,这是怎么形成的呢?我们有时也用0代表False,用1或-1代表True(其实,只要非零都可以代表True),而0和1在二进制中还是本身,于是True、False的运算就变成的0 和1的运算,我们可以把And叫做补0运算,把Or叫做补1运算,当用And处理两个二进制数的时候,它们逐位比较,如果相同的位上都是0或都是1则没有变化,而如果一位上是0,另一位上是1,最后结果上相应的位上就变成0。比如1010(十进制中10)And 1101(十进制中13),最后就得1000(十进制中8),相同的Or亦是如此,只不过在不同的地方补1。在位数不同时,前面补0,你可以在VB中试试看。但为什么要讲这些呢,原因是我不想让大家真的以为这个例子中就是相加,只不过碰巧它们的0和1处在不同的位置上,并且这个小知识在今后的位图操作和API操作中很有用处。
下面在来判断用户按下的按钮。
Private Sub Command1_Click()
message = MsgBox("显示" & Combo1.List(Combo1.ListIndex) & "和" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")
Select Case message
Case 1
MsgBox "你按下了OK钮"
Case 2
MsgBox "你按下了Cancel按钮"
Case 3
MsgBox "你按下了Abort按钮"
Case 4
MsgBox "你按下了Retry按钮"
Case 5
MsgBox "你按下了Ignore按钮"
Case 6
MsgBox "你按下了Yes按钮"
Case 7
MsgBox "你按下了No按钮"
End Select
End Sub
运行程序,结果如图7-2,7-3。
0702.gif (3220 字节)


0703.gif (2798 字节)
 
 

相关教程