vbvb基础入门教程,哪里错了

帮忙找个VB错误(初学者的题目)_百度知道
帮忙找个VB错误(初学者的题目)
求1*2*…*20我写的代码在下面:Dim i As IntegerDim p As Longp = 1For i = 1 To 20p = p * iNext iPrint 20; &!=&; p运行后提示说:实时错误'6':溢出不知道错哪了,帮忙找找~谢谢~!
我有更好的答案
20! = 2.6 * 10^18Long类型的数据肯定是放不下的,编写这类数据连续相乘的程序时,建议直接定义为双精度的会更好一点。如果相乘的两个数据类型不同,则按照范围更大的那个数据类型自动转换。如:Dim i As IntegerDim j As IntegerDim k As Longi = 1000j = 100k = i * j虽然k的取值范围很大,但肯定也会溢出错误的,因为i和j都是整形,如果你将i ,j之一定义为Long的话,就不会出错了。
采纳率:23%
你把dim p as long 改成 dim p as single就可以啦,因为long放不下数值数据类型 数值类型分为整数型和实数型两大类。 1、整数型 整数型是指不带小数点和指数符号的数。 按表示范围整数型分为:整型、长整型 (1)整型(Integer,类型符%) 整型数在内存中占两个字节(16位) 十进制整型数的取值范围:-32768 ~ +32767 例如:15,-345,654%都是整数型。而45678%则会发生溢出错误。 (2)长整型(Long,类型符&) 长整数型在内存中占4个字节(32位)。 十进制长整型数的取值范围: - ~ + 例如:678&都是长整数型。 2、实数型(浮点数或实型数) 实数型数据是指带有小数部分的数。 注意:数12和数12.0对计算机来说是不同的,前者是整数(占2个字节),后者是浮点数(占4个字节) 实数型数据分为浮点数和定点数。 浮点数由三部分组成:符号,指数和尾数。 在VB中浮点数分为两种: 单精度浮点数( Single ) 双精度浮点数( Double ) (1)单精度数(Single,类型符!) 在内存中占4个字节(32位),,有效数字:7位十进制数 取值范围:负数 -3. ~ -1. 正数 1. ~ 3. 在计算机程序里面不能有上标下标的写法,所以乘幂采用的是一种称为科学计数法的表达方法 这里用E或者e表示10的次方(E/e大小写都可以) 比如:1.表示1.的负45次方 vb里面可以这样表示:8.96E-5 例:21e5(正号省略)表示: 21乘以10的5次方的一个单精度数 (2) 双精度数(Double,类型符#) Double类型数据在内存中占用8个字节(64位) Double型可以精确到15或16位十进制数,即15或16位有效数字。 取值范围: 负数: –1.316D+308 ~ -4.9 正数: 4.9 ~ 1.316D+308 比如17.88D5,表示它是一个双精度数,表示17.88乘以10的5次方 这里用D来表示10的次方
20的阶乘太大了,长整型也存不下了。把20改为10应该就没有错误了。或者定义P为单精度类型。
20的阶乘结果超过了长整形的上限了吧
其他1条回答
为您推荐:
其他类似问题
初学者的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。当前位置: >>
Tahoma,8,134VB 入门教程 www.baidu.com1.1 1我们需要什么 我们需要什么?当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致 之余,多少总会产生些许编程的冲动。编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而 不可及的事情。如果运用基于 DOS 下的编程语言,譬如 C、Qbasic、Pascal 等等,真不知何年何月才能有所 成就。 编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人 都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机语言(可视化编 程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以 发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。 Visual Basic(以下简称 VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几 年前 VB 诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着 VB6.0 的研制、测试, 这么高的更新率,不外乎说明两个问题:用户对 VB 的热衷,微软对 VB 的重视。不可否认微软对市场的预测 能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最 有力的竞争对手,如 IE 之于浏览器领域,《帝国时代》之于游戏都是最好的例证。对于 VB 现在也有一个很 强的竞争对手DDDelphi,有人把它称作 VB 杀手,这显然有偏激之处,VB 的确有它的不足之处,但 Delphi 又何尝不是呢,而且以微软对 VB 的倾心,VB 的功能必然会越来越强大。 VB 的诞生 VB 的出现可以说是 Microsoft Windows 的日渐成熟的必然产物。Microsoft Windows 为程序员和最终用 户提供了一个共同的人机界面。对用户,Windows 提供了一个图形鼠标的操作环境,该环境对所有的应用程 序都一样;对于程序员,Windows 提供了一组预定义工具----称之为 Microsoft Windows 的软件开发工具箱 (SDK),该工具能使程序员建立一个与 Windows 界面相同的应用程序,而且,程序员不必关心最终用户的硬 件配置情况。在这一开发环境中,程序员唯一困难的是 Microsoft SDK 提供了六百多个函数和与其一致的事 件驱动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程 序驱动编程技术和六百多个函数的功能,而且还得用 C 语言描述这些问题。因此一般情况下,程序员首先要 掌握 C 程序设计技术,而后再开始学习 SDK。这样的条件下就要求在 Microsoft 多任务环境下出现一种操作 方便,使用简单的新工具----Visual Basic 由此诞生。 何为可视 英文 Visual 的意思是“视觉的”,“可视的 Baisc”这个名字可能抽象了点,但实际上它却是最直观的 编程方法,之所以叫做“可视”,你只要看到 VB 的界面就会明白,实际上你无需编程,就可以完成许多步骤。 1 Tahoma,8,134 在 VB 中引入了控件的概念,在 Windows 中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控 件的种类,VB 把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。这样你就可 以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工 作的。1.2 2第二章:事件、属性及数据类型以后两章可能会比较枯燥,但不可否认也很重要,所以为了学好 VB,我们一定要打好基础才行。 一、事件 通过上一章的例子,你可能对“面向对象的编程”已经有了一定了解,它是由事件驱动的,对于不同的对象, 所能感应到的事件也会不同,譬如说当你把鼠标移进某一区域时就会触发 MouseMove 事件,这很直观,也容易理解,但也有些事件比较抽象,下面我来对一般的事件进行一下解释。1. 窗体和图象框类事件 Paint 事件:当某一对象在屏幕中被移动,改变尺寸或清除后,程序会自动调用 Paint 事件。注意:? ? ? ?当对象的 AutoDraw 属性为 True(-1)时,程序不会调用 Paint 事件。Resize 事件:当对象的大小改变时触发 Resize 事件。 Load 事件:仅适用于窗体对象,当窗体被装载时运行。 Unload 事件:仅适用于窗体对象,当窗体被卸载时运行。2.当前光标(Focus)事件 ? ?GotFocus 事件:当光标聚焦于该对象时发生事件。 LostFocus 事件:当光标离开该对象时发生事件。注意:Focus 英文为“焦点”、“聚焦”之意,最直观的例子是,比如有两个窗 体,互相有一部分遮盖,当你点下面的窗体时,它就会全部显示出来,这时它处 在被激活的状态,并且标题条变成蓝色,这就是 GotFocus 事件,而相反,另外一 个窗体被遮盖,并且标题条变灰,称为 LostFocus 事件。上面所说的“光标”并 非指鼠标指针。3.鼠标操作事件? ? ? ? ?Click 事件:鼠标单击对象。 DbClick 事件:鼠标双击事件。 MouseDown、MouseUp 属性:按下/放开鼠标键事件。 MouseMove 事件:鼠标移动事件。 DragDrop 事件:拖放事件,相当于 MouseDown、MouseMove 和 MouseUp 的组合。 2 Tahoma,8,134?DragOver 事件:鼠标在拖放过程中就会产生 DragOver 事件。4.键盘操作属性 ? ?KeyDown、KeyUp 事件:按键的按下/放开事件。 KeyPress 事件:按键事件。5.改变控制项事件 ? ? ?Change 事件:当对象的内容发生改变时,触发 Change 事件。最典型的例子是文本框(TextBox) 。 DropDown 事件:下弹事件,仅用于组合框(ComboBox)对象。 PathChange 事件:路径改变事件,仅用于文件列表框(FileBox)对象。6.其他事件 ?Timer 事件:仅用于计时器,每隔一段时间被触发一次。二、属性 每个对象都有它的属性,并且“Name”属性是共有的,有了“Name”属性才可以在程序中进行调用。对于属性,可以在窗体的布局操作中完成,也可以在程序运行中改变,这取决你的需要,但有些属性是只读 的,它只能在控件布局时改变。我将在以后的实例中具体介绍各个属性的作用。 三、数据类型 学过编程的人都知道大多数的计算机语言都规定了各自的数据类型,VB 也不例外。其实,在一个最简单的程 序中数据类型是可以不作规定的,也就是说,变量可以使用各种类型,但是在一个复杂的程序里,这样做就 很危险,因为很可能给同一个变量赋予了不同的类型,而导致程序出错。所以,为了程序的严谨和便于查看, 正确的定义数据类型是必要的。定义数据的另一个原因是,不同的数据占用不同的内存数量,譬如整型 (Interger)数据占 2 字节,而长整型数据占 4 个字节,定义合适的数据类型,不管你相信不相信,它可以节省内存!1. VB 常用的数据类型有:整型(Integer,表示-32768 至 32767 之间的整数) 、长整型(Long,表示 -2,147,483,648 至 2,147,483,647 之间的整数) 、实型(Single,表示-3.37E+38 至 3.37E+38 之间的实 数) 、双精度实型(Double,表示-1.67E+308 至 1.67E+308 之间的实数) ,字符(String,每个字符占 一字节,可以储存 0~65,535 个字符) ,布尔(Boolean,只有两个值 True/-1,或 False/0) 。 2. 数据类型的定义方法: 定义变量最简单的方法是用“Dim”关键字,它的语法:?Dim 【变量名】As 【数据类型】如:DimIndex As Integer也可以在一行中定义多个变量,如:3 Tahoma,8,134Dim Index As Integer , Dim Number As Long把多个变量定义成同一类型可以写成:Dim Index , Number As Integer更可以在定义时进行初赋值:Dim Index=有时为了简便,也以符号进行简单的定义,作用是和上面一样的。整型可以用“%”代替,长整型可以用“&” 代替,实型可以用“!”,双精度实型可以用“#”定义,如刚才的第一个例子可以写成:Dim Index% 等价于 Dim Index As Integer?对于常量的定义用 Const 定义,如:Const COLOR=。为了在程序中便于查阅,我们对变量和常量的写法进行规定,变量一般用小写方式,常量则全部 大写。注意:使用常量的好处,对于程序中经常出现的数值,应设常量等于它,这样一是书写方便,其 二,如果要改变该数值,只需改变定义常量的语句值,而不需改变每个语句,提高了效率。? 数组的定义类似于变量定义,所不同的是数组需要指定数组中的元素个数,例如:Dim IntegerArray(99) As Integer这个数组中包含 100 个元素,脚标从 0 到 99。 也可以指定脚标的起始值,例如:Dim IntegerArray(2 to 10) As Integer这个数组含有九个元素,脚标从 2 到 10。 还可以定义多维数组:Dim ThreeD(4,2 to 5,3 to 6) As Integer上例定义了一个三维数组(4×4×4)。?记录的定义记录定义是把控制权交给用户的方法,它让用户可以定义自己的数据类型,它使用关键字“Type”,方法是:Type 【数据类型标识符】4 Tahoma,8,134&域名& &域名& &域名&As &数据类型& As &数据类型& As &数据类型& ?????????? End Type例如,定义一个地址数据:Type Address Street As String ZipCode As String Phone As String End Type这个地址数据里包括三个属性,街区、邮政编码和电话,可以把某数据定义成此类型:Dim MyHome As Address要调用或改变“MyHome”的值时,类似于对对象的属性的操作:变量名.域名=“??”为了简化书写重复的部分,可以用关键字“With”:With MyHome .Street=阜成路” .ZipCode= .Phone= End With1.3 3第三章:VB 语言本章提要:? ? ?VB 语法与 Basic 的异同 注释语句 长语句的分行5 Tahoma,8,134? ? ? ? ?条件语句 循环语句 运算操作 数据定义与赋值 函数和过程一、VB 与 Basic?VB 之所以叫做“Visual Basic”就是因为它使用了 Basic 语言作为代码,所以它们之间有着千丝万缕 的关系,如果学过 Basic 的话,看到 VB 的程序结构会感到很亲切。但 VB 作为新生物,也超越了 Basic 的限制,有了许多自己的特点:? ? ? ? ?VB 建立了一种新的变量类型DD货币型变量,通过使用仅带有二位小数的货币变量,就能避免因 使用实型变量而带来的数值积累误差问题。 VB 在调用函数(Function)时,必须在函数名后跟一对括号。 VB 对白兰地使用范围重新做了规范,在 Basic 里把隐含变量都当作全局变量,而在 VB 里对隐含变 量都当作局部变量。 VB 里的说明语句(Declare) ,仅支持动态链结库(DLL)的子程序和无变量函数。 使用数组,必须事先用 Dim 或 Redim 进行定义。二、注释语句 在使用注释语句之前必须先了解注释的作用,注释不仅仅是对程序的解释,有时它对于程序的调试 也非常有用,譬如说可以利用注释屏蔽一条语句以观察变化,发现问题和错误。以后注释语句将是 我们在编程里最经常用到的语句之一。 在 VB 里,注释语句有两种,一种是用“Rem”关键字,这跟 DOS 里的批处理文件的用法一样,还有 一种是利用单引号“’”,例如: ‘Dim a As String 与 Rem Dim a As String 的作用是一致的。三、长语句的分行 在比较早的版本中,因为没有象 C 等语言用“;”隔开语句与语句,VB 的语句是必须写在一行里的, 不过后来版本的 VB 里如许用分行符“_”把一个长语句分成若干行来存放。 四、条件语句6 Tahoma,8,134 如果你学过任何一种编程的话, 都会知道在程序里控制其流程的有两种语句, 条件与循环, 自然也不例外, VB 其实不管哪种语言,条件和循环的样子都差不多,只不过各有各的规矩罢了。 在条件语句里,我们先来学习“If??Then??”语句。 它的一般语法是: If &条件& Then &语句& &语句& ??? End If 与 C 语言不同,VB 的条件语句更符合英语的语法,如果 Then 后面所跟的语句只有一条,可以写成: If &条件& Then &语句& 而不用 End If。 有时我们还会用到 If &条件& Then &语句& Else &语句& End If 更可以在 Else 里在嵌套 If 语句,如: If &条件& Then &语句& Else If &语句& Else &语句& End If 所有这些可以用一个表格表示:7 Tahoma,8,134条件 1 True 语 句 1 False 条件 2 True 语 句 2 False 条件 3 True False ????????? 条件 N True 语句 N False 语句 N+1? ? ?用了过多的 Else 后你会感到很不方便,而且程序结构也不清晰,所以大多数的语言还有 Select 语句帮助解 决这个问题。 VB 里的 Select 语句的格式是这样的: Select Case &变量名& Case &情况 1& ?? Case &情况 2& ?? Case &情况 3& ?? ?? ?? Case Else ?? End Select 例如:8 Tahoma,8,134 Select Case a% Case 1 Print “a= Case 2 Print “a= Case Else Print “a does not equal to 1 or 2.” End Select 五、循环语句 循环结构是计算机语言里一种重要的结构,它的应用广泛,最简单的例子是累加器的作用,还可以用于穷举 法,更直观的例子是把某件事重复指定的次数,这样就不用把要重复的语句输入多次,而通过循环结构完成, 非常方便。 C 语言里有一个“for”循环语句,VB 里也有“For”关键字,作用也差不多,只是 VB 的“For”语句更容易 理解。它的格式是: For &循环变量&=&初赋值& To &终值& [Step &步长&] ?? ?? Next &循环变量& 在默认情况下,Step 被设为“1”,可以省略,Step 也可以设为负值,例如: Dim a= For I=1 To 10 a= Next I 这是一个最简单的累加器的例子,把 1 到 10 累加在一起,然后赋值给“a”这样的效果和上面是一样的,只 不过是倒着加罢了,请看: Dim a= For I=10 To 1 Step C1 a=9 Tahoma,8,134 Next I While 语句也是一个很常用的循环语句,它的形式很多。? ? ?Do While ?? Loop 语句 While ?? Wend 语句 Do ?? Loop WhileWhile 后面都跟逻辑条件判断,“Do While ?? Loop 语句”和“While ?? Wend 语句”作用相似,都是 先判断 While 后面的条件是否为“真”,如果为“真”则执行里面的语句,如果为“假”,则退出循环,循 环直至条件为“假”终止。“Do ?? Loop While ”与前两者的区别在于,它不管条件的真假,都会先执行 “Do”后面的语句,也就是说,它至少执行语句一次。 与 While 用法相似的还有 Until 语句,它是直至条件为真则终止循环,句式把 While 上述三个语句的 While 换成 Until 即可,但是因为容易记混,所以我建议只用 While 即可。Until &条件&可以相当于 While Not & 条件&。 For 循环和 Whlie 循环应当根据适当的环境使用,它们有时也可替换。 六、运算操作 1. 数学运算 +:加法运算,也适合于字符串的之间的合并运算。 -:加法运算。 *:乘法运算。 /:除法运算。 \:整除运算。 Mod:求余运算。例如:a Mod b 表示 a 被 b 整除以后的余数。 ^:幂运算。A^B 表示以 A 为底的 B 次方。 关系运算 关系运算也称比较运算,它表示不等式的真或假,VB 共提供六种运算符,分别是= 2. 逻辑运算? ? ? ? ? ? ?1.逻辑运算是对真或假的运算,我将列表说明:ABNot A 非And 与Or 或Xor 异或Eqv 相等Imp 蕴含10 Tahoma,8,134T T F FT F T FF F T TT F F FT T T FF T T FT F F TT F T TTDDTrue FDDFalse七、 数据与定义 本标题的内容已经在上一章向大家详述过,在这里就不再重复。八、函数与过程 函数与过程有许多相似的地方,它们之间最大也是最本质的区别就在于,函数有一个返回值,而过程只是执 行一系列动作,所以可以简单的把函数理解成为一个变量,而 VB 中的每个事件都是一个过程,比如 Command1_Click()就是一个过程。 因为在程序设计中经常会有重复的地方,所以把它做成一个函数或一个过程,在使用时进行调用,可以节省 大量的输入代码的时间,而且使用函数和过程也便于程序的结构化和修改查看。函数和过程都可以有参数, 也可以没有参数。 关于函数和过程将在以后的章中配合实例讲解,请您继续 VB 教程。1.4 4-1第四章按钮(一)从本章开始我们将正式进入 VB 的编程世界,但这还仅仅是个开端,要编出功 能强大的软件,还要学很多东西,那就要看以后的 VB 高级教程了,我也得努力学 啊! 按钮是我们在 Windows 操作见到最多的控件, 它们有着各种各样的功能: “确 认”、“取消”、“下一步”等等,这些都是按钮的表现,另外还有很多图形话 的按钮,其实它们并没什么不同,所有的按钮都是通过单击(click)事件实现的,11 Tahoma,8,134只不过是在外表不同罢了。下面就让我们建立一个最简单的按钮,双击工具箱的 CommandButton,将在窗体上建立一个形如图 4-1 的按钮,它的缺省 名(Name 属性)为 Command1,我们可以把它改名为 cmdExit,把 Caption 属性设 为“退出”,然后双击,按钮填写代码: Private Sub cmdExit_Click() Unload Me End Sub按下 F5 或者工具条上的播放按钮,运行程序。图 4-2 当你按下退出按钮的 时候,就会自动退出程序,原因是当你单击按钮时激活了它的 Click 事件,执行 “Unload Me”语句,使得窗体被卸载。 上面举了一个比较简单的例子,下面的例子稍微复杂些: 新建窗体,控件布局如图 4-3 所示,包括一个 List 控件,一个 Text 控件和 两个按钮(Command1 和 Command2), (比较简单的程序我们都采用缺省名), 对它们属性做如下修改:12 Tahoma,8,134List1 Text1 Button1Caption=“请输入你的名字” Text=“”(空字符串) Caption=“复原” Enabled=FalseButton2Caption=“清除”把使用 Button1 的 Enabled 属性设为 False(假),是使程序在初始时,无法 单击 Command1。按 F5,运行程序,图 4-4,复原按钮成为灰色,不可选。当然现在程序还什么也不能做,下面我们在程序中添加代码: 首先在 General 里声明全局变量: Dim StoreString As String '用来储存字符串13 Tahoma,8,134※注意:为什么用全局变量? VB 里每一个小过程都相当于一个程序,程序里的变量称为局部变量,是只能在程 序内部使用的,而当程序调用结束后,由于从内存中被清除,所以变量储存的值 也就消失了,这里的全局变量是用来在过程中传递字符串。 接着填写以下代码: Private Sub Command1_Click() Text1.Text = StoreString Command1.Enabled = False End SubPrivate Sub Command2_Click() StoreString = Text1.Text Text1.Text = && '清除 Command1.Enabled = True End Sub 运行程序,如图 4-5。按下“清除”,文本框被清除,按下“复原”,文本 有被恢复,许多程序中的 Undo/Redo 就是利用这个原理实现的,现在知道为什么 内存越多越好了吧。我们在把程序修改一下, Button2 删除, 把 Button1 的 Enabled 属性改为 True, Caption 改为“清除”,填写代码: Private Sub Command1_Click()14 Tahoma,8,134If Command1.Caption = &清除& Then StoreString = Text1.Text Text1.Text = && '清除 Command1.Caption = &复原& Else Text1.Text = StoreString Command1.Caption = &清除& End If End Sub 同样可以上面的功能,但是却少用了一个控件,控件使用少的程序启动会快 些。 下面的例子要更加复杂些,大家一定都用过 Windows 附件中的计算器,它是 一个标准的科学计算器,利用 VB 我们也可以做到,只是没有那么复杂,四则运算 而已。 先建立一个新的项目文件,里面包含一个 Form1 的窗体。然后,添加控件, 包括一个 Text 框 (Text1) 和 17 个按钮, 17 个按钮使用的名称都是 Command1, , 这 只是 Index 属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建 立一个按钮(Command1),然后在 Command1 上击鼠标右键,选择复制(Copy), 然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组, 选择“是”,重复上面步骤,直至创立 17 个按钮为止。各控件属性如下表:15 Tahoma,8,134Text1BackColor=&H00C0FFFF& Text=“0.”Command1Index 0DD16 Index 0DD9 Caption= Index 10 Caption= Index 11Caption= Index 12 Caption= Index 13 Caption= Index 14 Caption= Index 15 Caption= Index 16 Caption=“清除”如果想改变一些其他的属性,比如字体,可以自己定义一下 Font 属性,如果 相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件 一起选定,然后对它们的共同属性进行修改。 别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方 很绕弯子,我尽量解释清楚。 在编写程序之前,我们先来回顾一下计算器的使用。1. 按下数字键在液晶屏上会出现数字,这是最基本的功能。 2. 第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算 出前两个数的结果,然后按下数字键,将又重新输入新的数字。 3. 输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下 “等于”,将得到二者的结果。然后又重复第二、三步。 4. 按下“清除”,数据被全部清除。了解了这些,我们一步一步实现。 先实现数据的输入,请看代码。 与未创立组的控件相比,它的事件里多了 Index 参数,组里所有的对象都使 用同一个事件。16 Tahoma,8,134先在 General 里声明窗体级全局变量: Dim Num1, Num2 As Single Dim StrNum1, StrNum2 As String Dim FirstNum As Boolean '判断是否是数字开头 因为 Text1 里是存放字符串的,所以要把输入的数据进行运算,必须把字符 型变量转变为实型变量,分别用 Num1、Num2 和 StrNum1、StrNum2 进行存放。 在 Form_Load 事件里给变量初赋值: Num1 = 0 Num2 = 0 StrNum1 = && StrNum2 = && FirstNum = True 因为 17 个按钮使用的是同一事件,所以我们用一个 Select Case 语句区分各 个按钮,双击任意按钮输入代码: Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 To 9 If FirstNum Then StrNum1 = Str(Index)’实型转字符型 FirstNum = False’初赋值为假 Else’非初赋值 StrNum1 = StrNum1 + Str(Index) End If Text1.Text = StrNum1’显示 &还有其他语句,等待插入& End Select End Sub 运行程序的话已经可以输入数据,下面我们来处理小数点。17 Tahoma,8,134在 General 里声明新的变量: Dim PointFlag As Boolean '判断是否已有小数点 我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一 个布尔变量做判断。 在 Form_Load 里进行初赋值: PointFlag = False 在 Command 的单击事件里接着上面输入新的代码: Case 10 If Not PointFlag Then’如果没有小数点 If FirstNum Then’如果是第一个字符 StrNum1 = &0.& FirstNum = False Else StrNum1 = StrNum1 + &.& End If Else’已有小数点 Exit Sub’则退出单击事件 End If PointFlag = True Text1.Text = StrNum11.5 4-2第四章按钮(二)下面会复杂一些,我们先跳过等号,而来处理四则运算: 先在 General 里声明新变量:18 Tahoma,8,134Dim Runsign As Integer '储存运算符号 Dim SignFlag As Boolean '判断是否已有运算符号 然后在 Form_Load 中进行初赋值: Runsign = 0 SignFlag = False 在接下的 Command1_Click 中继续输入代码:Case 12 To 15FirstNum = True’使下一次可以输入新数据 PointFlag = False '还原标记值 If SignFlag Then’前面已有运算符未运算 Call Run Else SignFlag = True StrNum2 = StrNum1’把字符串 1 复制给字符串 2 StrNum1 = &&’字符串 1 清空 End If Runsign = Index - 11 ‘储存键入的运算符 里面运算的部分我用了一个过程, 是因为在按下等号时还会调用到运算过程, 这样可以减少代码的输入,也使程序便于浏览。建立过程(Procedure),可以在 General 部分直接输入,也可以通过菜单里的“Add Procedure”添加。Run 的代 码如下: Sub Run() Num1 = Val(StrNum2) Num2 = Val(StrNum1) Select Case Runsign Case 1’加19 Tahoma,8,134equal = Num1 + Num2 Case 2’减 equal = Num1 - Num2 Case 3’乘 equal = Num1 * Num2 Case 4’除 equal = Num1 / Num2 End Select StrNum2 = Str(equal) StrNum1 = StrNum2 Text1.Text = StrNum2 End Sub 下面是其余的代码:(在 Command1_Click 事件里,接着写) Case 11 If Not SignFlag Then Text1.Text = StrNum1 equal = Val(StrNum1) FirstNum = True PointFlag = False Else Call Run SignFlag = False End If Case Else’清除按钮 Call ClearData 里面又用到了一个 ClearData 过程,实际上就是 Form_Load 里的变量初赋值,代 码如下:20 Tahoma,8,134Sub ClearData() Num1 = 0 Num2 = 0 StrNum1 = && StrNum2 = && FirstNum = True PointFlag = False Runsign = 0 SignFlag = False Text1.Text = &0.& End Sub这样完整的程序就完成了,本章介绍了 VB 的第一个控件DD按钮,并且举例,希 望你继续看下一章DD菜单。 下面给出完整的程序代码: Dim Num1, Num2 As Single Dim StrNum1, StrNum2 As String Dim FirstNum As Boolean '判断是否是数字开头 Dim PointFlag As Boolean '判断是否已有小数点 Dim Runsign As Integer '储存运算符号 Dim SignFlag As Boolean '判断是否已有运算符号21 Tahoma,8,134Sub ClearData() Num1 = 0 Num2 = 0 StrNum1 = && StrNum2 = && FirstNum = True PointFlag = False Runsign = 0 SignFlag = False Text1.Text = &0.& End SubSub Run() Num1 = Val(StrNum2) Num2 = Val(StrNum1) Select Case Runsign Case 1 equal = Num1 + Num2 Case 2 equal = Num1 - Num2 Case 3 equal = Num1 * Num2 Case 422 Tahoma,8,134equal = Num1 / Num2 End Select StrNum2 = Str(equal) StrNum1 = StrNum2 Text1.Text = StrNum2 End SubPrivate Sub about_Click() MsgBox &Create by 周晓阳。&, vbDefaultButton1, &VB 教程第四章范 例& End SubPrivate Sub Command1_Click(Index As Integer) Select Case Index Case 0 To 9 If FirstNum Then StrNum1 = Str(Index) FirstNum = False Else StrNum1 = StrNum1 + Str(Index) End If Text1.Text = StrNum1 Case 10 If Not PointFlag Then23 Tahoma,8,134If FirstNum Then StrNum1 = &0.& FirstNum = False Else StrNum1 = StrNum1 + &.& End If Else Exit Sub End If PointFlag = True Text1.Text = StrNum1 Case 12 To 15 FirstNum = True PointFlag = False '还原标记值 If SignFlag Then Call Run Else SignFlag = True StrNum2 = StrNum1 StrNum1 = && End If Runsign = Index - 11 Case 1124 Tahoma,8,134If Not SignFlag Then Text1.Text = StrNum1 equal = Val(StrNum1) FirstNum = True PointFlag = False Else Call Run SignFlag = False End IfCase Else Call ClearDataEnd Select End SubPrivate Sub Form_Load() Call ClearData End Sub 补充说明按钮还有两个重要的属性 Default(默认属性)和 Cancel(取消属性),两个属性都以布尔赋值,把 Default 设为 True,则在按下回车键时,不论焦点处于何处,都会触发该按钮的 Click 事件,而当 Cancel 属性被设 为 True,在按下 ESC 键时,该按钮的 Click 属性发生。下面举个例子: 建立一个新窗体和两个按钮, Name 属性分别为 cmdOK 和 cmdCancel, 把前者的 Default 设为 True, 后者的 Cancel 设为 True,Caption 属性分别为 OK 和 Cancel。如图 4-8。填写代码后运行:25 Tahoma,8,134Private Sub cmdCancel_Click() MsgBox &Cancel 按钮被按下&, vbDefaultButton1, &提示& End SubPrivate Sub cmdOK_Click() MsgBox &OK 按钮被按下&, vbDefaultButton1, &提示& End Sub 结果如图 4-9、4-10:快捷键大家一定都知道,在 VB 如何实现呢。其实很简单,在刚才的例子里在建立一个按钮 Command1,把它 的 Caption 属性设为 Click &ME,如图 4-11,在 M 的下面有一条下划线,运行程序,当你按下 Alt+M 的时候 就触发了 Command1_Click 事件:Private Sub Command1_Click() MsgBox &Click ME 按钮被按下&, vbDefaultButton1, &提示&26 Tahoma,8,134 End Sub 据我所知,有许多用户有使用快捷键的习惯,注意细节上的问题能够使将来你的程序得到更多人的欣赏,不 是吗?1.6 5第五章菜单我们经常在 Windows 操作里遇到各种各样的菜单,菜单的操作把各种命令结构化、分分类化,也节省了 命令所占的空间,从作用上来讲,菜单类似于按钮,但它只有一个事件DDClick。 VB 作为 Windows 下的可视编程工具,菜单的设计当然很容易实现,VB3.0 按下 Ctrl+M,VB4.0 以上的版 本请按下 Ctrl+E,便可呼叫出菜设计的窗口,无论 VB 的版本,这个窗口的样式是大同小异的,请见图 5-1。前面说过, 菜单相当于简单的按钮, 它有几个属性, 其中的大部分我们都曾经见过, 包括 Name、 Caption、 Index、Checked、Enabled、Visible、快捷键和热键等等。其中 Name 是必须的。下面请跟我一起设计第一个 菜单。 首先在 Caption 添入“文件”,Name 为“mnuFile”,按下 Next 按钮,这样就建立了第一级菜单,注意 菜单设计窗口的左中有四个箭头,按下向右的箭头,出现了一排小点,如图 5-2,在 VB 里这叫缩排,这样 就可以开始建立第二级菜单。27 Tahoma,8,134小知识:实际上我们在生活就中经常用到缩排,写文章时开头要空两格就是一种缩排,在编写程 序时更需要缩排,这样使程序结构化,便于观察,当然菜单设计里的缩排有更多的用处。接着填写下一菜单项,Caption 为“新文件”,Name 为“mnuFileNew”,按下 Next 键。小知识:VB 一共如许建立 6 级子菜单,如图 5-3,尽量不要建立这样的菜单,要知道藏在越深处的菜单项越 难以被人发现,一个友好的程序界面应该让用户马上找到需要的命令。28 Tahoma,8,134接着重复以上步骤,创建以下三个菜单项:Caption 保存 Name mnuFileSave Level 1 Caption 另存为 Name mnuFileSaveAs Level 1 Caption 载入 Name mnuFileLoad Level 129 Tahoma,8,134 我们在菜单里还经常看到把不同项分开的分隔条, VB 里也很容易做到, Caption 设为 在 把 “-” (减号) , Name 为 mnuBar1。最后增加这个菜单条的最后一项,Caption 为“退出”,Name 为 mnuFileExit。现在可以 退出菜单设计窗口,菜单如图 5-4。怎么样,经过几章的学习,是不是觉得 Windows 世界也不是那么神秘?也对,也不对。的确,我们很轻 易的实现了这么多的功能,但如果你仔细想想,我们的程序还什么也不会做呢!可以说是徒有其表,要实现 强大的功能,恐怕要学很长很长时间,而现在仅仅是个开头,并不是想入非非的时候,我们还要继续努力! 现在再次按下 Ctrl+E,重回菜单设计窗口,接着添加菜单。(按下向左的箭头,可以使菜单上升一级, Level 代表菜单的级别),根据下表添加新的菜单项:Caption 编辑 Name mnuEdit Level 0 Caption 剪切 Name mnuEditCut Level 1 Short-Cut Ctrl+X Caption 复制 Name mnuEditCopy Level 130 Tahoma,8,134Short-Cut Ctrl+C Caption 粘贴 Name mnuEditPaste Level 1 Short-Cut Ctrl+V Caption 关于 Name mnuAbout Level 0其中 Short-Cut 就是平常我们说的热键,你可以在菜单设计窗口中找到,设置一个你需要的组合键,这 样不论窗口的焦点处于何处,菜单在第几层,只要按下热键,就相当于调用了该项的 Click 事件。结果如图 5-5。从 Win95 以来程序里引入了鼠标右键功能,使鼠标有了更大的用处,在 VB 里我们也很容易实现。 打开 Form_MouseDown 事件,该事件有两个参数:Button,当按下左键时 Button 返回 1,当按下右键时 Button 返回 2,;Shift,是指在点击鼠标时按下的键盘键,如 Shift、Ctrl、Alt,这些我们将在以后讨论, 但很难避免在一章中不涉及到不该涉及的内容,学习时有个大概的理解即可。下面在该事件里添加代码(效 果如图 5-6):31 Tahoma,8,134Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu mnuEdit, vbPopupMenuLeftAlign Else Exit Sub End If End Sub在上面的代码中我们用到了 PopupMenu 方法,它的语法是: object.PopupMenu 菜单名,标记,X 坐标,Y 坐标 标记是用来表明弹出菜单位于鼠标指针位置的,它有三个值:vbPopupMenuLeftAlign vbPopupMenuRightAlign VbPopupMenuCenterAlign位于鼠标左 位于鼠标右 位于鼠标中部X、Y 值可以用来制定菜单弹出的位置,可以省略。32 Tahoma,8,134 关于菜单的 Visible、Enabled 等属性请自己尝试。1.7 6-1第六章输入(一)我们为什么要设计计算机程序呢,当然是为了计算机能为我们完成工作,但是要完成不同的任务,我们 就必须对计算机下达命令,然后计算机在把信息返馈回来DD任务是否完成。以上就是所谓的人机对话或交 互功能,尤其是在 Windows 操作里我们需要进行更多的输入工作,我们需要填写各种各样的表格,设置程序 的重要参数,把数据输入给计算机,再又它完成既定的工作就是今天我们本章要重点讨论的问题DD在 VB 中如何建立完整的输入机制。 在 VB 中提供了一个函数 InputBox 能帮助我们建立一个最简单的输入窗体,语法如下:InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])该函数返回一个字符串表达式,其参数含义为:(“[]”表示可缺省)promptDD字符串表达式,最大长度为 1024 字符,窗体上的提示部分。 TitleDD字符串表达式,显示标题栏里的文本。 DefaultDD字符串表达式,窗体中文本框的缺省值。 xpos,yposDD数值表达式,以 Twips 为单位指定窗体出现在屏幕上的位置。 helpfileDD字符串表达式,是帮助文件的完整路径。 ContextDD数值表达式,指定适合的帮助主题。可能你看了上面的说明并不明白,那么下面我们就用 Input 语句完成一个最简单的程序。小知识:屏幕坐标在计算机的屏幕上也有一个类似于我们在中学里常用到的直角坐标系,之不过它 的原点不在左下,而是在屏幕的右上角,屏幕的最右上方坐标为(0,0),它的 横坐标和我们的习惯是一致的,而纵坐标则是越向下越大,不仅是屏幕,所有的 对象里都是一样,需要记清。见图 6-133 Tahoma,8,134新建一个项目(project),在 Form_load 里填写一行代码:a$ = InputBox(&举荐你最欣赏的网站&, &最佳网站投票&, &VB 小驿&)’按下 F5 运行程序,在 Form1 出现之前先会弹出一个输入对话框,如图 6-2。这时,无论你按下 OK 还是 Cancel 都是没有区别的,因为我们并没有对输入数据进行处理,下面我们完成一个更加复杂些的程序。新建一个项目文件,把窗口布局成类似于图 6-3 的结构,各对象属性如下表:34 Tahoma,8,134Form1Caption “最佳网站投票演示” BorderStyle 3’不可调整大小 ControlBox 0’FalseFrame1 Label1Caption “输入框属性“ 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 Button1 Caption “指定输入框位置” Index 0,1 Index 0 Caption “显示输入框” 1 Caption “退出程序”35 Tahoma,8,134 本例中出现了一个 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 If36 Tahoma,8,134End Sub接着在按钮中填写代码: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。是不是有种受骗的感觉,啊哟哟,可不是我的错, 就是这么容易嘛!37 Tahoma,8,134从刚才的例子里, 我们接触了一些 VB 中的输入方法, 其实数据输入不仅仅局限于向 Text 框中输入数据, 数据的输入还有许多其他的方法, 譬如前面的 Check1 也是向程序发出一定的信息, 只要是通过操作向计算机 发布命令就可以叫做输入,下面我们来一一介绍。 首先要介绍的当然是输入用到最多的 Text 框。Text 没有 Click 事件,它的缺省事件是 Change,也就是 当 Text 框里的一旦内容改变就会激发该事件发生,还是让我们用实例说话吧。 Text 有几个特殊的属性,一是 MultiLine(多行)属性,MultiLine 属性为 False 的时候,不论文本有 多长,它都会在一行里显示下去,换行符无效,当它为 True 的时候,字符串显示到 Text 框边缘的时候就会 自动换行。另一个与之配合的属性是 ScrollBars 属性,它有 4 个值,0 到 3,分别是没有滚动条,水平滚动 条,垂直滚动条,和二者都有,它是一个只读属性,也就是说只有在程序设计过程中才能改变,而不能在程 序运行中改变,但是我们可以通过 API 解决运行中改变的问题,我们放在以后再讲。PasswordChart 属性, 我们经常在程序操作中遇到要填写密码的部分,为了保密起见,在屏幕上显示的字符一般“*”表示,并且这 时是无法用剪贴板的,这在 VB 中非常容易做到,把 PasswordChart 中设一个用来代替字符串的字符即可,并 不一定是“*”哦。 下面我们完成一个有趣的小程序,是我以前遇到过的一个程序,我对其进行了部分修改。程序的意思是 这样的,假设你是一个司机应超速被警察扣留,现在需要你向警察陈述你的理由,如果你的话能打动他,就 可以免交罚金,如果你在规定的字数里没有说出什么有震撼力的话,那老兄你可就惨了,交钱吧。J38 Tahoma,8,134 这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文 字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者 10% 的免罚机会(有点无聊??L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图 6-6)Form1Icon Stop 图标 Caption 停车检查 BorderStyle 3Label1Caption 警官,我超速是有原因的,请听我说: BackColor &H& ForeColor &H&Label2Caption 你必须在 30 字之内完成你理由的申诉,否则 将受到罚款! BackColor &H& ForeColor &H00FF0000&Text1MultiLink True Text “”39 Tahoma,8,134Picture1Autosize True BackColor &H& Visible TruePicture2Autosize True BackColor &H& Visible FalsePicture3Autosize True BackColor &H& Visible FalseCommand1Visible 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.Left40 Tahoma,8,134Picture3.Top = Picture1.Top End Sub下面我来讲一讲程序是怎样运行的,我们将用到 Text 的 Change 事件,每当字符串改变一次就对它进行 一次检查,算出已经说的字数,当字数超过 10 时,下面的红绿灯会变成黄色,并且在这时随机抽取一个数, 它在一个范围内出现的可能是 10%,如果在这个范围内就可以免交罚金,如果不在范围则继续,当文字超过 20 的时候,红绿灯会变成红色,再一次抽取随机数字,步骤同上,如果 30 个字已满,再进行一次检查,如 果你真的那么不幸就该罚款了。 程序的步骤清楚了,我们在来看看程序的要点。由于中文是双字节字符,也就是说一个汉字占两个 ASC 码的位置,而 VB 显然是为英语国家设计的用 Len 函数无法返回汉字字节,也就是说一个汉字和和一个 ASC 字符在 Len 函数中得到的值是一样的,这就需要特殊处理。用 Asc()函数,在括号内放入一个 ASC 字符或 字符串,它会把第一个 ASC 码转化为 0-255 的数值,而把一个汉字放入,它的值必然不在 0-255,这也就 可以作为判定汉字的基础。我们可以把英文算作半个汉字。第六章第二部分1.8 6-2第六章输入(二)下面我们来看看代码: 在 General 里声明窗体级变量:Dim Level As IntegerPrivate Sub Command1_Click() Unload Me End SubPrivate Sub Text1_Change() Dim StrLength As Integer’字符串长度41 Tahoma,8,134Dim 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 iStrLength = 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 1942 Tahoma,8,134If 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 = &您可以离开了&43 Tahoma,8,134End If Level = 3 Else Picture1.Visible = False Picture2.Visible = False Picture3.Visible = True Str1 = &我已经不耐烦了!& Label2.Caption = Str1 & &你还有& & Str(30 - StrLength) & &个字可以说& End If Case ElseText1.Enabled = FalseLabel2.Caption = &你已经没有机会了!& Command1.Visible = True Command1.Caption = &交钱吧,肇事犯!& End Select End Sub44 Tahoma,8,134中间有几个函数需要解释一下:Mid 可以从字符串中取出一部分,返回字符型,格式: Mid(字符串,从第几个字符开始,取字符的长度) Asc 可以把字符转换为 ASCII 码,格式: Asc(字符串) Rnd,取得大于 0 但小于 1 的数值,可以没有参数。怎么样,十分简单吧,我们将在下一次继续讨论 VB 的输入机制! 在继续上面的内容时,我想再回顾和强调几个在字符串操作中经常函数: 先是几个已经接触过的,Mid(),Asc(),Len(),它们的语法分别是: Mid(字符型,起始字符,长度) 返回子字符串,如果从字符串的第一个字符取起,起始字符为 1,依此类推。 Asc(字符型) 返回数值,如果参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符 ASCII 值。 Len(字符型) 返回字符串的长度。45 Tahoma,8,134下面我再为你解释几个新的函数: Left(字符串,长度) 将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是 Right(),它将从字符串的最后一个字符向右取字符串。Chr(数值型) 该数值范围从 0-255,返回字符型,如 Chr(65)可返回字符“A”,这样可以输入一些用键盘无法输入的字符。 Str(数值型) 该函数把数值型转换为字符型,也许你觉得数值“123”和字符串“123”没什么区别,但在内存中一个 ASCII 字符是占一个字节,也就是说字符串“123”占 3 个字节,而当数值“123”是整型时,它占两个字符, 当它是长整型时,占 4 个字节。与之向对应的是 Val(数值型),它把数值型转换为字符型。 上面的函数都是以后要经常用到的,请将它们熟悉。 上次讲到文本框的用处,还有意思吗?你是否能把上次的程序稍稍变动一下,来计算出输入的单词数, 提示一下,单词与单词之间是用空格分隔开的。 输入不仅仅是向文本框输入字符,凡是从外界向程序传递数据都可以叫做输入,我们一一说明白。 无线钮,记得我们曾在第一章中完成过我们的第一个程序DD“Hello World!”它就是一种输入的方法, 在设计 VB 程序时可以通过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它因 为很象无线电收音机上的按钮因而得名无线钮。如果要在一个窗体内放置多组无线钮必须用 Frame 控件把它 们区分开来。 下面我们在来完成一个例子, 顺便熟悉一下另外两个处理字符串的函数DDLTrim()和 Rtrim(), 它们分别用来删除字符串左边的空格和右边的空格,让我们看看它们是如何工作的。程序窗体如图 6-8,由于窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1 到 3),分 别用来显示输入字符,显示把空格换成星号的字符,和经过处理的字符,还有三个无线钮(Option1 到 3), 要修改的只有 Caption 属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。因 46 Tahoma,8,134 为空格在我们在文本框中无法看到空格, 所以我们通过一个称作 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 SubPrivate Sub Text1_LostFocus()47 Tahoma,8,134Dim Origionword As String Origionword = Text1.Text Text2.Text = addstar(Origionword) LTrimmedword = addstar(LTrim(Origionword)) RTrimmedword = addstar(RTrim(Origionword)) LRTrimmedword = LTrim(RTrim(Origionword)) End SubPrivate Sub Option1_Click() Text3.Text = LTrimmedword '显示删除左空格后的字符串 End SubPrivate Sub Option2_Click() Text3.Text = RTrimmedword '显示删除右空格后的字符串 End SubPrivate Sub Option3_Click() Text3.Text = LRTrimmedword '显示删除两边空格后的字符串 End Sub 最后结果如图 6-9。48 Tahoma,8,134 与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则可以有多个选择, 就象在添表时,性别那项只能有一个选择,而在描述你以前的职业时可以有学生、程序员、家庭教师或者什 么,总之有很多选择,下面我们举一个简单的例子加以说明。 假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机情况,你就需要一个调 查表,为了使这个调查表不止枯燥,可以在这个程序中加入一些图形。新建一个项目文件,窗体布局如图 6-10。程序很简单,一共有两个框架(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 If49 Tahoma,8,134 End SubPrivate Sub Check2_Click() If Check2.Value Then Picture2.Visible = -1 Else: Picture2.Visible = 0 End If End SubPrivate Sub Check3_Click() If Check3.Value Then Picture3.Visible = -1 Else: Picture3.Visible = 0 End If End SubPrivate Sub Check4_Click() If Check4.Value Then Picture4.Visible = -1 Else: Picture4.Visible = 0 End If End Sub50 Tahoma,8,134这个程序比我们见过的任何程序都简单,就不再做说明。1.9 6-3VB 入门教程之六第六章输入(三)滚动条(ScrollBar)在视窗中也是一个不可缺少的部分,由于面积所限,我们不得把屏幕上的内容滚 来滚去,以显示大量的内容,这就是我们经常要用到的滚动条。但滚动条除去滚动窗口,还有一个很重要的 作用DD输入,想想你经常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音 量就会增大,而你把它滑向小的一方音量就会减小,或者一个控制左右两个音箱的均衡器,当滑块在正中央 的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在 Windows 操作中, 我们也经常要用到类似的效果。 在 VB 中提供了两个常规的滚动条控件DDVscroll 和 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。51 Tahoma,8,134 下面我们看一个实例。 大家都知道,物体之所以会有颜色是因为物体表面的材料吸收了太阳光中的部分色光,而还有部分色光 没被吸收而被反射回来,它就成了我们看到的颜色,黑色就是物体吸收了所有的太阳光的所有色光,没有反 射颜色,所以在我们看来是黑的,而当物体反射了所有的色光,我们看到的就是白色。在计算机中,颜色的 表示就是象我们刚才描述的样子,它把颜色分为红(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×÷3=。在下面的小程序中,我们通过三个滚动条分别代表 R、G、B,滚动滚动条,将在右边的图片框中显示相应的 颜色,并且在下面的文本框中显示颜色的十六进制数值。 现在,新建一个项目文件,在 Form1 中如图 6-12 布局控件,各控件属性如下表:HsrollBarName Hscroll1 Index 0、1、2 (共同属性)52 Tahoma,8,134Max 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).Value53 Tahoma,8,134GreenNum = 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& + GreenStrBlueStr = 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 SubPrivate Sub HScroll1_Change(Index As Integer)‘当滚动条被改变时Text1.Text = GetColorValue Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum) End Sub运行如图 6-13。54 Tahoma,8,134列表框(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 .AddItem .AddItem .AddItem &0-Default& &1-Arrow& &2-Cross& &3-I-Beam&55 Tahoma,8,134.AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem End With End Sub&4-Icon& &5-Size& &6-Size NE SW& &7-Size NS& &8-Size NW SE& &9-Size WE& &10-Up Arrow& &11-Hourglass& &12-NoDrag& &13-Arrow And Hourglass& &14-Arrow And Question& &15-Size All&Private Sub List1_Click() MousePointer = List1.ListIndex’这里的 MousePointer 是窗体全局内的属性 End Sub当你点在不同项上面鼠标指针也会随着改变,如图 6-14。AddItem 方法语法如下:ListObject “字符串”,数值字符串后的数值可以指定条目加入在第几个条目的位置上,如果没有的话,添加项将逐次排下去。56 Tahoma,8,134 下面举一个复合列表框的例子,例子通过选择复合列表框中的选项来改变文本框的字体。请新建一个项目文 件,在窗体中添加一个 ComboBox(Combo1)和一个 TextBox(Text1),添加如下代码。Private Sub Combo1_Click() Text1.FontName = Combo1.List(Combo1.ListIndex) End SubPrivate 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。(第六章完)57 Tahoma,8,1341.10 7第七章输出上一章里,我们讨论的 VB 的输人机制,这次我们来集中讨论 VB 中信息的输出。 输入和输出是不可分割的,人们输入的最终目的是希望计算机作出反应,任何一个程序都不可能避开这 个问题,所以就算要完成一个最基本的程序,也要有输出的部分,复杂的程序更是如此。 在输入的一章里,我们学习的第一个输入方法是 InputBox,相应的在输出中我们第一个要接触的是 MsgBox(Message Box),和 InputBox 相似,MsgBox 也是简化了的窗体,可以以函数的形式返回操作。它的 基本语法是: MsgBox &显示内容&,按钮值,&标题& 通过这个函数可以产生一个标准的 Windows 消息框,象我们平时经常接触的“Yes/No”、 “OK/Cancel”, “Retry/Abort/Ignore”等等,这些都是在按钮值中设定的,按钮值如下:数值 0 1 2 3 4 5含义 OK OK 和 Cancel Abort、Retry 和 Ignore Yes、No 和 Cancel Yes 和 No Retry 和 Cancel并且不同的消息可以搭配不同的图标,比如帮助文件用问号,一般提示用一个圈里一个 I 等等,它们也 是按钮值的一部分:数值 16 32含义 表示危险 表示问号58 Tahoma,8,13448 64表示警告 表示信息但是如何既显示按钮也显示相应的图标呢,请看一会儿下面的例子。前面说过,MsgBox 是函数,那么它 就会有返回值,当你按下某个按钮就会返回一个数值,以便对用户不同动作的捕捉,返回值如下:数值 1 2 3 4 5 6 7含义 OK Cancel Abort Retry Ignore Yes No说了这么多,可能你已经不知所措了,不过看过下面的例子后,相信一切都会迎刃而解。首先建立一个新项目文件,并添加以下对象(见图 7-1)DD一个 Button(Command1),两个 ComboBox (Combo1 和 Combo2),不要对其属性做更多的修改,只需把 Command1 的 Caption 改为“Click Me”。这个 程序的目的是自由组合上面的按钮值,以显示各种消息框,并且返回按下的按钮,Combo1 和 Combo2 分别用 来选择按钮值,首先在 Form_Load 中初始化程序:Private Sub Form_Load()59 Tahoma,8,134Combo1.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 SubComboBox 的用法已经在上一章中讨论过,在此不再赘述,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 得60 Tahoma,8,134到 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) 1101 ( And (十进制中 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 按钮&61 Tahoma,8,134Case 7 MsgBox &你按下了 No 按钮& End Select End Sub运行程序,结果如图 7-2,7-3。62
关于Visual Basic 6.0 类开发 (vb 类模块 学习 入门 教程) 关于 Visual Basic 6.0 类开发(上) ---对程序员和编程爱好者来说,VB 中类的技术是学习中的一个...VB6.0图文实例教程_计算机软件及应用_IT/计算机_专业资料。VB 教程:序言-不再...二、注释语句 在使用注释语句之前必须先了解注释的作用,注释不仅仅是对程序的...VB6.0 入门 教程_计算机软件及应用_IT/计算机_专业资料。Tahoma,8,134 VB 入门教程 www.baidu.com 1.1 1 我们需要什么 我们需要什么?当我们在一个精彩的游戏...VB基础教程之语法篇_计算机软件及应用_IT/计算机_专业资料。VB6.0 基础教程 1.1 注释注释是指在编写代码时,编写者在代码中添加的一些说明性语句。注释是非执行语句...vb6.0实例教程_计算机软件及应用_IT/计算机_专业资料。浅谈用VB6.0 编写木马程序...本文主要介绍C/S 结构其原理就是在本机直接启动运行 的程序拥有与使用者相同的...接下来谈谈怎样学习 VB,先说说“看实例学 VB6.0”系列教程,它是面向编程初学者的 VB 入门教程,这个教程的特点是抛开 晦涩难懂的概念和语法,不做内容上的堆积和...VB6.0详细讲义(VB6实用教程_VB6从入门到精通)_IT认证_资格考试/认证_教育专区...方法一 (遍历含 MDI 窗体) Dim frm As vb.Form For Each frm In Forms ...VB6.0实用教程_从入门到精通_试题_语文_初中教育_教育专区。手把手教你学vb,边学边动手操作第一章 Visual Basic 介绍 第二章 用户界面设计 第三章 编程的基础...1 VB 6.0 入门速成教程 配实例 参考学习基础 2 关于 VB 语言和怎样学习 VB VB6.0 全称为 VisualBasic 6.0,是微软公司推出的可视化编程工具 MSDN 之一,是目前...VB6.0详细讲义(VB6实用教程_VB6从入门到精通,含2012最新VB期末复习试题及答案)_财会/金融考试_资格考试/认证_教育专区。VB6.0详细讲义(VB6实用教程_VB6从入门到...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 vb.net数据库入门经典 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信