vb各章知识点总结

vb各章知识点总结

ID:11530362

大小:519.00 KB

页数:58页

时间:2018-07-12

上传者:U-3183
vb各章知识点总结_第1页
vb各章知识点总结_第2页
vb各章知识点总结_第3页
vb各章知识点总结_第4页
vb各章知识点总结_第5页
资源描述:

《vb各章知识点总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第一章:VisualBasic概述1.11.1             VisualBasic简介•具有面向对象的可视化设计工具•事件驱动的编程机制•提供了易学易用的应用程序集成开发环境•结构化的程序设计语言•支持多种数据库的访问•支持DDE、DLL、OLE技术•完备的Help联机帮助功能1.1.       1.2面向对象的程序设计方法基础2.2.      对象及对象类:动作体的逻辑模型,称为“对象”3.3.      属性:属性是用来描述对象的特性。4.4.      方法:方法指对象可以进行的动作或行为。VB对象具有属性、方法和事件。属性是描述对象的数据;方法告诉对象应做的事情;事件是对象所产生的事情,事件发生时可以编写代码进行处理。VB的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色。其它一些属性描述气球的状态(充气的或未充气的)或不可见的性质,如它的寿命。通过定义,所有气球都具有这些属性;这些属性也会因气球的不同而不同。 气球还具有本身所固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。所有的气球都具备这些能力。 1.1.     3基于Windows环境下的应用程序的工作方式——事件驱动在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。 在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发、也可以由来自操作系统或其它应用程序的消息触发、甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”作一定的假设。当作出某些假设时(例如,假设在运行来处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段中有值之前禁止使用启动该处理过程的命令按钮)。  在执行中代码也可以触发事件。例如,在程序中改变文本框中的文本将引发文本框的Change事件。如果Change 事件中包含有代码,则将导致该代码的执行。如果原来假设该事件仅能由用户的交互操作所触发,则可能会产生意料之外的结果。正因为这一原因,所以在设计应用程序时理解事件驱动模型并牢记在心是非常重要的。  在VB中事件的调用形式是:  PrivateSub对象名_事件名   (事件内容)  EndSub  1.4VisualBasic的集成开发环境VB集成开发环境(IDE——IntegratedDevelopingEnvironment)由以下元素组成:1.标题栏用于显示正在开发或调试的工程名和系统的工作状态(设计态、运行态、中止态)。2.菜单栏   用于显示所使用的VisualBasic命令。VB6.0标准菜单包括:3.工具栏   在编程环境下用于快速访问常用命令。缺省情况下,启动VB后显示“标准”工具栏,附加的编辑、窗体设计和调试的工具栏可以从“视图”菜单上的“工具栏”命令中移进或移出。4.窗体设计器  用来设计应用程序的界面。启动VB后,窗体设计器中自动出现一个名为Form1的空白窗体,可以在该窗体中添加控件、图形和图片等来创建所希望的外观,窗体的外观设计好后,从菜单中选择“文件”→“保存窗体”→在保存对话框中给出合适的文件名(注意扩展名),并选择所需的保存位置→确定。需要再设计另一个窗体时,单击工具栏上的“添加窗体”按钮即可。5.控件(工具)箱  由一组控件按钮组成,用于设计时在窗体中放置控件。除了缺省的工具箱布局之外,还可以通过从上下文菜单中选定“添加选项卡”并在结果选项卡中添加控件来创建自定义布局。6.弹出式(上下文)菜单  在要使用的对象上单击鼠标右键即可打开快捷菜单,其上会出现与当前对象相关的经常执行的操作,以加快操作速度。7.工程管理器窗口  用于浏览工程中所包含的窗体和模块,还可以从中查看代码、查看对象。8.属性窗口  是VB中一个比较复杂的窗口,其中列出了对选定窗体和控件的属性设置值。VB中正是通过改变属性来改变对象的特征,如大小、标题或颜色。9.对象浏览器  列出工程中有效的对象,并提供在编码中漫游的快速方法。可以使用“对象浏览器”浏览在VB中的对象和其它应用程序,查看对那些对象有效的方法和属性,并将代码过程粘贴进自己的应用程序。 10.对象浏览器  右击窗体中的对象、从工程管理器中点“查看代码”按钮。11.窗体布局窗口  FormLayoutwindow允许使用表示屏幕的小图象来布置应用程序中各窗体的位置。12.立即、本地和监视窗口这些附加窗口是为调试应用程序提供的,它们只在IDE之中运行应用程序时才有效。1.5创建VB应用程序的一般步骤 一个VB程序也称为一个工程,由窗体、标准模块、自定义控件及应用所需的环境设置组成。开发步骤一般如下:1.创建程序的用户界面2.设置界面上各个对象的属性3.编写对象响应事件的程序代码4.保存工程5.测试应用程序,排除错误6.创建可执行程序•硬件环境:486以上处理器、16MB以上内存、50MB以上的硬盘空间、CD-ROM驱动器、鼠标等•软件环境:Windows95或indowsNT3.51以上版本•初次安装:1)启动Windows952)插入具有VB6.0系统的光盘3)运行VB6.0安装程序Setup.exe4)选择“典型安装”或“自定义安装”或“最小安装”•添加或删除VB6.0部件:1)插入具有VB6.0系统的光盘2)运行“开始/设置/控制面板”3)双击控制面板中的“添加/删除程序”图标4)选择其中的“VisualBasic6.0”选项•启动1.桌面:开始/程序/VisualBasic6.02.建立快捷方式,双击图标•退出1.选择文件菜单下的退出命令2.单击窗口关闭按钮举例:1启动VB,开始新工程2创建程序的用户截面3加入程序代码4保存工程文件5运行和调试应用程序,检查并排除程序中的错误6生成可执行程序7打印窗体和代码 (7)列表框(ListBox):用于列出可供用户选择的项目列表。用户可以从中选择一个或多个项目。属性:名称:(通常以“List”作为前缀。)List:列表属性。用于保存列表的内容。List实际上是一个一维数组,数组中元素的值,就是在执行时看到的列表项(item)一维数组:List中有5个元素,List(0),List(1)List(2),List(3),List(4)列表项文本List(0)=68List(1)=78List(2)=88List(3)=80List(4)=76数组名:List列表项序号:0,1,2,3,4,(从0开始)列表项文本(数组元素值)分别为:6878888076 Listcount:列表框内所有选项的总数,也就是List()数组元素的总个数。ListIndex:用户最后单击的列表项在List()数组中的编号顺序。(无选中时其值为-1)Text:列表项的正文。其值为最后选中的列表项的文本。请记住如下关系:[对象名称.]List(ListIndex)=TextColumns:列表框显示形式。设定Listbox的列表项若超过显示范围时,其卷动方式使用垂直滚动条或是水平滚动条。取值:0:(默认值)使用垂直滚动条。逐行显示列表项,可能有垂直滚动条。1~n:使用水平滚动条。此时列表框内一次可显示的列数(Column)即为n值。 MultiSelect:设定是否允许用户多重选取对象的列表项取值:0:不能多重选取。(默认值)1:简易多重选取。(用鼠标或空格键来选取,一次一个)2:高级多重选取。可用[shift]或[ctrl]来选取。(类似文件选取)Selected:设定列表项是否被选取的状态。它是一个与List大小相同的数组。其中各元素的取值:True:被选取。False:不被选取。(默认值)Sorted:排序属性。设定列表项是否要照ASCII代码排序。(字母顺序)取值:True:是(不区分大小写)False:否。(默认值)方法:(P28)AddItem:添加列表项。格式:[对象名称.]AddItem<列表项文本>[,插入位置序号]说明:1、若不指定位置,则插入到列表项末尾。2、新列表项插入后,原来位置及其后的列表项顺序下移。Clear:删除列表所有项目。RemoveItem:删除列表项。格式:[对象名称.]RemoveItem删除项序号事件:Click:单击事件。Dblick:双击事件(使用较少)应掌握:1.如何添加或删除列表框中的列表项?方法一:在设计态:定制List属性。(向列表中添加列表时,按[ctrl]+[Enter]换行。) 方法二:在程序代码中:用AddItem,RemoveItem等方法进行。2.如何知道目前用户所选取的列表项和目前列表框中的列表项数目?用户目前所选的列表项:Text的值。目前列表框中的列表项数目:ListCount的值。(8)组合框(comboBox):将文本框和列表框结合在一起,在列表框中所选项目的文本会自动填入文本框。(与列表框相比,组合框一次只能选取一个列表项)工具箱中的图标P25;在窗体中的形式属性:同Listbox有:List,ListCount,ListIndex,Text,Sorted等等。Style:外观属性。设置组合框的类型和功能。取值:(实验指导书P40)0:(默认值)系统将创建一个带有下拉式列表框的组合框。称为组合下拉式的组合框。它的下拉式窗体不是一直显示的。(如word中字体大小选择框),此状态下用户可将所内容直接输入到文本框中。1:系统创建一个由文本框和列表框直接结合在一起的简单组合框。称为组合式的组合框。它的下拉式窗体是一直显示的。如:word中字体菜单对话框中的字体、字号对话内容。2:系统创建一个没有文本框的下拉式列表框。单击列表框右侧的按钮,文本框才会显示出来。称为单纯下拉式的组合框。此状态下用户不可在文本框中输入,只能在列表中选择。且下拉式窗体也不是一直显示的。Text:文本属性。其取值为用户从列表框中选定的文本内容或直接输入文本框中的内容。  事件:对不同类型的组合框,响应的事件是不相同的。对于0,2类型的组合框:单击事件。对于1类型的组合框:双击事件。带有文本框的0,1组合框:在编辑文本时可引发Change事件。说明:1、用户若只需要使用单选的列表框,则可用组合框来代替。2、如何添加或删除组合框中的列表项?(方法:同列表框)3、如何知道用户目前所选取或输入的列表项是什么?由于组合框不允许多重选取,所以,Text属性值为内容;Listindex属性值为序号。 方法:同列表框。 图像:(image):主要用于图像的显示、放大、缩小等静态显示图像场合。图像框中不能容纳其他控件、也不能绘制图形和显示文本。而图片控件框中可以。图像在工具箱中的图标P25;在窗体中的形式属性:名称:visible:设置此对象在执行时是否看得见。取值:True:(默认值)看得见。False:隐藏。enabled:可用否。picture:设定图像框中代表的图片名称。其值在设定时的格式为:盘符路径图片文件名(.ico图标文件.bmp位图文件)stretch:用来决定图像控件的大小是否要随着所载入图片的大小而变化。 取值:true:随图片的大小而变化。False:(默认值)不随图片的大小而变化。事件:类似窗体。方法:MoveRefresh(10)图片:(picturebox):不仅可以装入图像,还可以在它上面绘制各种图形和显示正文、放置控件(类似框架控件)。图片在工具箱中的图标P25;在窗体中的形式水平滚动条(horizontalscrollbar)、垂直滚动条(verticalscrollbar):滚动条:用来附加在那些不能自动支持滚动的应用程序或控件中水平滚动或垂直滚动查阅大量信息。一般出现在文本框、列表框右边;用来调整数据或选择输入。(如word中字体、段落对话框中)滚动条在工具箱中的图标P25;在窗体中的形式属性:(实验指导书P18)名称:(通常以“Hsb”、“Vsb”作为前缀。)Max/Min:定义了Value属性值所能出现的最大值和最小值。说明:1、一开始使用滚动条时,Max为32768,Min为0。2、水平滚动条位于最左边时、垂直滚动条位于最上边时为Min;水平滚动条位于最右边时、垂直滚动条位于最下边时为Max。Value:滚动条目前所在位置所对应的数值。(也可在代码中设定。)LargeChange:当用户在滚动块的上方、下方(左方、右方)单击时Value所增加的值。默认值为1。SmallChang:当用户在滚动条两端的箭头按钮上单击时Value所增加的值。默认值为1。事件:Change:在滚动块移动后(即Value值改变时)发生。 例如,可用一个滚动条的Change事件过程更新一个TextBox控件中滚动条的Value属性的设置。或者可以利用Change事件过程在一个工作区里显示数据和公式,在另一个区域里显示结果。Scroll:在拖动滚动块时发生。单击滚动箭头或滚动条时不发生。方法:Move:用以移动滚动条。Refresh:强制全部重绘一个滚动条。SetFocus:设置焦点。将焦点移至指定的滚动条上。 时间:(timer)(计时器):用来实现与时间有关的功能。时间控件在工具箱中的图标P25;在窗体中的形式属性:名称:enabledinterval用来设定引发timer事件过程的间隔时间,单位为1/1000秒。事件:(时间控件只有一个事件)timer:它会按照interval所设定的时间定时引发。说明:时间控件的使用方法:1.在form上放置一个时间对象。2.在属性窗口中设定其interval属性。3.填写timer事件的程序内容,4.当程序开始执行后,将不会看到它的图标,每隔interval定义的时间内,程序会触发一次timer事件。时间控控件应用举例:windows中计时器,word中的定时保存文件,定时更新屏幕画面(屏幕保护程序)等等。:2'>  Text     取值:空字符串:(默认值):可以看到输入的字符。 某一字符:用户每输入一个字符,文本框内就出现一个该字符。MaxLength:最大长度属性。设置文本框的Text属性中所能放入的字符总个数。取值:0:(默认值)。1~32KB。MultiLine:多行属性。设置用户是否可在文本框内输入多行文本。取值:True:可多行输入。False:(默认值)只能单行输入。Alignment:对齐属性。设置文本框内的文本内容的对齐方式。取值:0:(默认值)靠左对齐。1:靠右对齐。2:居中对齐。说明:本属性只在MultiLine为True时有效。TabStop:[Tab]键属性。设置是否可用[Tab]键来移动焦点到另一个对象上。取值:True:(默认值)可以。False:不可以。其它属性类似窗体。方法:Refresh:刷新。SetFocus:设置焦点。通过本方法,可以使光标指向指定的文本框。事件:Change:当文本框的内容发生变化时,就引发本事件。LostFocus:当光标离开文本框时,引发本事件。Keypress:当用户按下或松开键盘上某个按键时,发生本事件。(2)标签:(Label)主要用于在窗体上增加文字说明。 标签在工具箱中的图标P25;在窗体中的形式属性:名称:标签名称。(通常以“Lbl”作为前缀。)Caption:标题属性。本属性的值为显示在标签上的内容。AutoSize:大小自适应属性。即标签的大小是否随着标题内容的多少而自动变化。取值:True:是。False:(默认值)否。FontName:字体名称。设置在标签内显示的文本的字体名称。方法:Refresh:刷新。Move:移动。事件:Click:单击事件。DblClick:双击事件。(3)命令按钮:(commandbutton):用户用鼠标单击命令按钮,表示要执行某项功能。属性:名称:(通常以“Cmd”作为前缀。)Caption:标题。其值就是在命令按钮上显示的文本。Default:设定此命令按钮是否为窗体的默认按钮。取值true:在窗体启动(Active)后,按Enter键马上就会执行的命令按钮。(同一窗体中只能有一个命令按钮的此项属性值为true)False:否。Enabled:设定命令按钮是否可用。取值true:(默认值):可用。 false:不可用。(命令按钮呈灰色)事件:click:单击事件方法:SetFocus:命令按钮经过SetFocus方法后,将取得焦点。(用户此时按回车键将会执行此命令按钮。)(4)复选框:(checkbox):用来设定程序的执行状态。属性:名称:(通常以“Chk”作为前缀。)caption:标题,显示在复选框的右方,指明此复选框所代表的功能。Value:表示复选框在执行时的三种状态。取值:0:不复选,执行时无勾。1:复选,执行时有勾。2:灰色,表示用户不能修改这个设定值,只能看到它目前状态。事件:click:单击事件。方法:Move:Refresh:(5)选项按钮:(optionbutton)用来设定程序的执行状态。属性:名称:(通常以“Opt”作为前缀。)caption:标题alignment:设置标题文本的对齐方式。 取值:0:(默认值)靠左对齐1:靠右对齐2:靠中对齐value:其值决定该选项按钮是否被选中。取值:true:表示此选项按钮被选中。False:表示此选项按钮没选中。说明:一个窗体或一个框架内的选项按钮只能有一个被选中,(不同框架内的选项按钮互不干扰)若用户不设定哪一个选项按钮的值为true,则系统指定第一个选项按钮的value值为true。事件:click:单击。方法:Move:Refresh(6)框架:(frame)可以用框架控件将其它各自独立的控件(一般指复选框、选项按钮等)组合在一组中。如实验指导书P13、P16。属性:名称captiontopleftwidthheightfontforecolor等等事件:clickdblclick等等说明:1、在使用框架控件将其它控件分组时必须先绘制框架控件,后绘制其中的控件。2、在一个框架内的控件可以进行整体的激活、屏蔽、移动等等。3、在同一个窗体中的多个选项按钮,只有一个可以被选中,但在窗体中可以用框架将选项按钮分类,在同一框架内的多个选项按钮中只有一个可以被选取。不同框架内的选项按钮彼此互不干扰。4、要将控件画在框架之中,不能双击控件,因为那样将使控件重叠在框架的上面,必须单击工具图标,然后在框架内拖动后释放,这样的所画的控件在框架之中。 第三章:VisualBasic语言基础本章内容及要求:1熟悉VB程序中代码和语句书写规则; 2掌握VB的数据类型;3掌握VB的运算符和表达式的使用;4掌握常用内部函数的使用;本章重点:变量和常量的定义及使用、运算符和表达式的使用及常用内部函数的使用。本章难点:数据类型、内部函数。3.1程序代码的组织方式 一个VB程序由窗体界面和程序代码两部组成,通过程序代码把窗口界面的各个对象以及应用中的其它元素联系在一起。程序代码部分则由若干被称为“过程”的代码行及向系统提供某些信息的说明组成。过程及说明又被组织在“模块”之中。将设计的过程代码及相关说明合理地组织到不同的模块之中,也就是设计代码的结构,在创建VB应用程序时是最为重要的一个步骤。一过程所谓“过程”,就是具有特定书写格式、包含若干可被作为一个整体执行的代码的组合。根据执行方式,可把“过程”分为“事件过程”和“通用过程”两类。二模块模块是VB用于将不同类型过程代码组织到一起而提供的一种结构。在VB中具有三种类型的模块:窗体模块标准模块类模块。  3.2. VB代码书写规则 (1)程序中不区分字母的大小写,Ab与AB等效; (2)系统对用户程序代码进行自动转换:1) 对于VB中的关键字,首字母被转换成大写,其余转换成小写   2) 若关键字由多个英文单词组成,则将每个单词的首字母转换成大写   3) 对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式(1)在同一行上可以书写多行语句,语句间用冒号(:)分隔 (2)单行语句可以分多行书写,在本行后加续行符:空格和下划线 _ (3)一行允许多达255个字符3.3 VB的数据类型3.3.1.数据类型 VB的标准数据类型数据类型关键字类型符前缀存储空间范围字节型Byte Byt1个字节0到255 数值数据类型整型Integer%Int2个字节-32,768到32,767长整型Long&Lng4个字节-2,147,483,648到2,147,483,647Single!Sng4个字节负数:-3.402823E38到单精度型-1.401298E-45;正数:1.401298E-45到3.402823E38双精度型Double#Dbl8个字节负数:-1.79769313486232E308      -4.94065645841247E-324;正数:4.94065645841247E-324     1.79769313486232E308货币型Currency@Cur8个字节从-922,337,203,685,477.5808到922,337,203,685,477.5807逻辑型Boolean Bln2个字节True或False日期型Date Dtm8个字节100年1月1日到9999年12月31日对象型Object Obj4个字节 任何Object引用变长字符型String$Str10字节加字符串长度0到大约20亿定长字符型String$Str字符串长度1到大约65,400变体数字型Variant Vnt16个字节任何数字值,最大可达Double的范围变体字符型Variant Vnt22个字节加字符串长度与变长String有相同的范围注意:  1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。  2)逻辑型数据只有True和False两个值,转换成整型时,True=-1,False=0,将其它类型转换成逻辑型时,非0数转换为True,0转换为False。  3)字符型可以包括所有的西文字符和汉字,字符必须用双引号括""起来,如:"abc123"  4)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。  如:#3/22/2002#   #2002-3-2214:30:20#  DimTAsDate  T=-2.5  PrintT   '打印出来的结果是1899-12-2812:00:00 5)任何数据类型的数组都需要20个字节的内存空间,加上每一数组维数占4个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以4个2字节之Integer数据元所组成的一维数组中的数据,占8个字节。这8个字节加上额外的24个字节,使得这个数组所需总内存空间为32个字节。2.变量与常量 (1)变量或常量的命名规则   1)必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度≤255个字符;   2)不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim、Sin   3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示   4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。 (2)变量声明   1)用Dim语句进行显式声明    语句形式: Dim 变量名[As类型]如:Dim intX Asinteger       说明:·如果没有As类型,则默认为变体类型。        ·可在变量名后加类型符来代替As类型 如:Dim intX%        ·一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用;        ·字符串变量根据其存放的长度是否固定,定义方法不同:      定长字符串: Dim strA As String*10        表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。      不定长字符串:Dim strA As String     最多可存放2MB个字符2)隐式声明   VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。  隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用Option Explicit语句来强制显式声明所有变量。(3)常量  1)直接常量    指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。    八进制常数: 在数值前加&O,如 &O123    十六进制常数:在数值前加&H,如&H123  2)用户声明的符号常量     用Const来声明: Const 符号常量名[As类型]=表达式  如:Const PI=3.14159             '声明了常量PI,代表3.14159,单精度型    Const MAXAsInteger=&O144 ''声明了常量MAX,代表八进制数144,整型    Const COUNT#=45.67         '声明了常量COUNT,代表45.67,双精度型  3)系统提供的常量    系统定义的常量位于对象库中,在对象浏览器中的VisualBasic(VB)和VisualBasicforAplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。    如:Form1.WindowsState=vbMaximized表示将窗口极大化。3. 变量作用域与变量说明语句1)变量作用域变量的有效作用范围称为变量作用域。VB有以下三个作用域等级,见表3:等级范围局部在过程中说明,仅在说明它的过程有效  窗体、模块 在窗体或模块中说明,在定义该变量的模块或窗体的所有过程内均有效。  全局(公有)在模块或窗体中说明,在工程内的所有过程中都有效3.4运算符与表达式本节课重点:运算符的功能及优先级表达式的书写及运算规则 VB中的运算符和表达式可分为:算术运算符与算术表达式、关系运算符与关系表达式、逻辑运算符与逻辑表达式 1. 算术运算符VB的算术运算符有以下几种:  。+:加法运算,也适合于字符串的之间的合并运算。 ·-:加法运算。 ·*:乘法运算。 ·/:除法运算。 ·:整除运算。 ·Mod:求余运算。例如:aModb表示a被b整除以后的余数。· ^:幂运算。A^B表示以A为底的B次方。把常量、变量等运算元素用算术运算符连接起来的式子称为“算术表达式”。例如:a*b/(c*d)3.14159265*r^2等带有括号的算术表达式在运算时将优先进行括号内的运算注意:(1)/和\的区别:1/2=0.5,1\2=0(2)Mod运算中,结果与被除数同号例如:-9Mod7结果为-2 · 字符串运算符与字符串表达式字符串运算符有:&、+。功能是字符串连接例如:"ABCD"+"EFGHI"‘结果为:"ABCDEFGHI""VB"&"程序设计教程"'结果为:"VB程序设计教程"说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们区别是:+(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。 3.4.2关系运算符与关系表达式关系运算符都是双目运算,是用来比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。  关系运算也称比较运算,它表示不等式的真或假,VB共提供六种运算符,分别是=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于)和<>(不等于)。关系表达式就是用关系运算把两个比较对象连接起来的式子。 ●    比较对象可以是变量、常量和算术表达式。例如:a<32x+y>=z/2b$<>"Basic"object1isobject2●    关系表达式的运算是采用“按值比较”的方法,即先求出运算符两边的“值”,若是变量,则取其当前值,如果两端的值满足条件,则结果为“True”,否则为“False”。  3.4.3逻辑运算符与逻辑表达式逻辑运算是对逻辑值进行的运算,Not逻辑非为单目运算符(要求一个操作数),其它为双目运算符。TFTXorFTXorT操作数相反时,结果才为真 异或XorTFTOrFFOrF操作数中有一个为真时,结果为真 或OrFTTAndFTAndT操作数均为真时,结果才为真 与AndTNotF操作数为假,结果为真,操作数为真,结果为假 取反Not结果例说明 说明运算符            逻辑运算的优先次序是:Not→And→Or→Xor2. 逻辑表达式逻辑表达式是用逻辑运算符把逻辑变量连接起来的式子。例如:a>=2*3.141159*rAnd(x<>5OrNotb)x>2OrText1.text=”Microsoft”表达式的书写:(1)运算符不能相邻。例a+*b是错误的。(2)乘号不能省略。例x乘以y应写成:x*y(3)括号必须成对出现,均使用圆括号,可以嵌套使用。(4)表达式从左到右在同一基准并排书写,不能出现上下标(5)要注意各种运算符的优先级别,为保持运算顺序,在写VB表达式时需要适当添加括号()  3.4.4.运算规则表达式中出现了多种不同类型的运算符时,其运算符优先级如下:算术运算符>关系运算符>逻辑运算符 说明:1.当一个表达式中出现多种运算符时,首先进行算术运算,接着关系运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。2.可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。2.3 VB的公共函数1. 数学函数VB中常用的数学函数 函数名功能示例结果Sqr(x)求平方根Sqr(9)3Log(x)求自然对数,x>0Log(10)2.3Exp(x)求以e为底的幂值,即求exExp(3)20.086Abs(x)求x的绝对值Abs(-2.5)2.5Hex[$](x)求x的十六进制数,返回的是字符型值Hex[$](28)"1C"Oct[$](x)求x的八进制数,返回的是字符型值Oct[$](10)"12"Sgn(x)求x的符号,当x>0,返回1;x=0,返回0;x<0,返回-1Sgn(15)1Rnd(x)产生一个在(0,1)区间均匀分布的随机数,每次的值都不同;若x=0,则给出的是上一次本函数产生的随机数Rnd(x)0-1之间的数Sin(x)求x的正弦值,x的单位是弧度Sin(0)0Cos(x)求x的余弦值,x的单位是弧度Cos(1)0.54Tan(x)求x的正切值,x的单位是弧度Tan(1)1.56Atn(x)求x的反正切值,x的单位是弧度,函数返回的是弧度值Atn(1)0.792. 字符函数 (1)字符串编码     在Windows采用的DBCS(DoubleByteCharacterSet)编码方案中,一个汉字在计算机内存中占2个字节,一个西文字符(ASCII码)占1个字节,但在VB中采用的是Unicode(ISO字符标准)来存储字符的,所有字符都占2个字节。为方便使用,可以用StrConv函数来对Unicode与DBCS进行转换,可以用函数Len()函数求字符串的字符数,用LenB()函数求字符串的字节数。 (2)常用的字符串函数函数名功能示例结果Len(x)求x字符串的字符长度(个数)Len("ab技术")4LenB(x)求x字符串的字节个数LenB("ab技术")8Left(x,n)从x字符串左边取n个字符Left("ABsYt",2)"AB"Right(x,n)从x字符串右边取n个字符Right("ABsYt",2)"Yt"Mid(x,n1,n2)从x字符串左边第n1个位置开始向右取n2个字符Mid("ABsYt",2,3)"BsY"Ucase(x)将x字符串中所有小写字母改为大写Ucase("ABsYug")ABSYUG Lcase(x)将x字符串中所有大写字母改为小写Ucase("ABsYug")absyugLtrim(x)去掉x左边的空格Lrim(" ABC ")"ABC "Rtrim(x)去掉x右边的空格Trim(" ABC ")" ABC"Trim(x)去掉x两边的空格Trim(" ABC ") "ABC"Instr(x,"字符",M)在x中查找给定的字符,返回该字符在x中的位置,M=1不区分大小写,省略则区分Instr("WBAC","B")2String(n,"字符")得到由n个首字符组成的一个字符串String(3,"abcd")"aaa"Space(n)得到n个空格Space(3)""Replace(C,C1,C2,N1,N2)在C字符串中从N1开始将C2替代N2次C1,如果没有N1表示从1开始Replace("ABCASAA","A","12",2,2)"ABC12S12A3. 日期与时间函数  常用的日期与时间函数函数名含义示例结果Date()返回系统日期Date()02-3-19Time()返回系统时间Time()3:30:00PMNow返回系统时间和日期Now02-3-193:30:00Month(C)返回月份代号(1-12)Month("02,03,19")3Year(C)返回年代号(1752-2078)Year("02-03-19")2002Day(C)返回日期代号(1-31)Day("02,03,19")19WeekDay()返回星期代号(1-7),星期日为1WeekDay("02,03,17")1  增减日期函数:DateAdd(要增减日期形式,增减量,要增减的日期变量)     例:计算期末考试日期:DateAdd("ww",15,#2002/3/19#)  求日期之差函数:DateDiff(要间隔日期形式,日期一,日期二)例:计算距毕业天数:DateDiff("d",Now,#2005/6/30#)  日期形式 日期形式yyyyqmydwwwhns意义年季月一年的天数日一周的天数星期时分秒4.转换函数函数名功能示例结果Str(x)将数值数据x转换成字符串Str(45.2) "45.2"Val(x)将字符串x中的数字转换成数值Val("23ab")  23Chr(x)返回以x为ASCII码的字符Chr(65)   "A"Asc(x)给出字符x的ASCII码值,十进制数Asc("a")   97Cint(x)将数值型数据x的小数部分四舍五入取整Cint(3.6)   4Int(x)取小于等于x的最大整数Int(-3.5)Int(3.5)-43Fix(x)将数值型数据x的小数部分舍去Fix(-3.5)  -3CBool(x)将任何有效的数字字符串或数值转换成逻辑型CBool(2)CBool("0")TrueFalseCByte(x)将0-255之间的数值转换成字节型CByte(6)6CDate(x)将有效的日期字符串转换成日期CDate(#1990,2,23#)1990-2-23CCur(x)将数值数据x转换成货币型CCur(25.6)25.6Round(x,N)在保留N位小数的情况下四舍五入取整Round(2.86,1)2.9CStr(x)将x转换成字符串型CStr(12)  "12"CVar(x)将数值型数据x转换成变体型CVar("23")+"A"  "23A"CSng(x)将数值数据x转换成单精度型CSng(23.5125468)23.51255CDbl(x)将数值数据x转换成双精度型CDbl(23.5125468)23.51254685. 格式输出Format函数   Format函数用于制定字符串或数字的输出格式。语法:x=Format(expression,fmt)    expression是所输出的内容。fmt是指输出的格式,这是一个字符串型的变量,这一项若省略的话,那么Format函数将和Str函数的功能差不多。如:语句输出Format(2,“0.00”)2.00Format(.7,“0%”) 70% Format(1140,“$#,##0”)$1,140                                    Format字符的意义字符意义字符意义 0 显示一数字,若此位置没有数字则补0 . 小数点 # 显示一数字,若此位置没有数字则不显示 , 千位的分隔符 % 数字乘以100并在右边加上”%”号-+$() 这些字出现在fmt里将原样打出第四章VB程序的控制结构4.1 算法概论1.算法的概念算法:指用计算机解决某一问题的方法和步骤。算法分类:数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。非数值算法:用于对非数值信息进行查找、排序等2.算法的特征 (1)确定性:指算法的每个步骤都应确切无误,没有歧义。 (2)可行性:指算法的每个步骤必须是计算机能够有效执行、可以实现的,并可得到确定的结果。 (3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的。 (4)输入性:指一个算法可以有0或多个输入数据。 (5)输出性:指一个算法必须有一个或多个输出结果。3.算法的评价  主要评价指标是:算法是否正确、运行的效率、占用系统资源的多少。4.算法的描述   一般常用流程框图来描述算法。图形符号名称代表操作输入/输出数据的输入与输出处理各种形式的数据处理判断判断选择,根据条件满足与否选择不同路径起止流程的起点与终点特定过程一个定义过的过程流程线连接各个框图,表示执行顺序连接点表示与流程图其他部分相连接5.基本算法结构 “结构化程序设计方法”规定算法有三种基本结构:顺序结构、选择结构和循环结构                     6.算法示例        欧几里德算法——求两个自然数的最大公约数  4.2赋值语句及InputBox、MsgBox函数(1)赋值语句:P59一般格式:var=<表达式>其中:var可以是变量名或属性名。功能:将表达式的值赋给“=”左边的变量(或为某个对象设置某属性值)。使用说明:■“=”左边的变量和右边的表达式的值的类型要一致。程序举例:已知半径,求圆面积已知三边长,求三角形面积P65(2)不同数据类型数据的赋值:P594.2.2InputBox函数:P60InputBox函数:用来接受用户通过键盘输入的数据。InputBox的使用形式:(P60)v=InputBox(prompt[,title][,default][,x,y][,helpfile,context])其中:v:可为变体变量、字符串变量、数值变量。功能:执行本语句,调用InputBox函数时,将在屏幕上出现一个带有提示信息的对话框,当用户从对话框的用户编辑框中输入数据并按回车键(或单击确定按钮))后,系统则把输入的数据赋给变量v。或按[Esc]键或取消按钮,则把0或空串赋给变量v。用户可通过设置InputBox函数的参数来定制提示信息对话框的形式。具体内容见P61 例:P61 2、MsgBox函数:向用户发布提示信息,并要求用户作出必要的响应。函数格式:(P61)例:P634.3分支结构与分支结构语句①if–then结构:(可实现单分支)一般格式:格式一:ifethen语句格式二:ifethen语句组endif其中:e为条件,其形式可为:逻辑变量、关系表达式或逻辑表达式。功能:执行本语句时,判断e的值,若为true,则执行then 后的语句(语句组),若为false,则执行本if语句(或endif)下面的语句。(对此功能的理解可看P64图4-7)程序举例:用InputBox输入一个数,若此数大小0,则在窗体上将它显示出来。PrivateSubForm_click()DimxAsIntegerx=InputBox("请输入一个数")Ifx>0ThenPrintxEndSub ②if-then-else-endif结构:(可实现两分支)一般格式:ifethenA语句组ElseB语句组Endif功能:执行本语句时,先判断e的值:e为true:执行A语句组后转endif下一条语句继续执行。e为false:执行B语句组后转endif下一条语句继续执行。(对此功能的理解可参考P58图4-3(b))程序举例:教材P65、实验指导书P43实验5-3③if-then-elseif结构:(可实现多分支)一般格式:ife1thenA1语句组Elseife2thenA2语句组Elseife3thenA3语句组……ElseifenthenAn语句组elseA(n+1)语句组Endif功能:执行本语句时依次判断各条件的值,若有ei的值为true,则执行相应的Ai语句组后转endif的下一条语句去继续执行。若所有ei的值均为false,则执行else后的A(n+1)语句组后转endif的下一条语句去继续执行。(对此功能的理解参考教材P66图4-8)一般来说,ei中最多只有一个值为true。程序举例:教材P66例4-2 ④Select-Case-EndSelect结构语句:(可以实现多分支结构)P66一般格式:SelectCaseeCasec1A1语句组Casec2A2语句组……CasecnAn语句组CaseElse A(n+1)语句组EndSelect其中:e:测试表达式,形式可为:算术表达式或字符表达式。c1,c2,…:测试项。形式可为以下三种:◆具体取值:常量1,常量2,…..◆连续的数据范围:下界值to上界值例如:8to12BtoH等等。◆满足某个判决条件:Is<关系表达式>常量例如:Is>20Is<=”p”其中Is代表e(测试表达式)的值。程序举例:教材P67例4-2 4.4循环结构与循环结构语句循环语句:(可以使得某些语句组重复执行的语句)4.4.2for-next循环语句:P69一般格式:forv=e1toe2[stepe3]……[exitfor]循环体语句组……nextv其中:v:循环控制变量。应为整型或单精度型。e1:循环控制变量的初值。e2:循环控制变量的终值。e3:循环控制变量的步长值。功能:(执行过程):P70使用说明:◆超过终值的情况:当e3>0时,指v>e2,当e3<0时,指v])[As<数据类型>][,数组名2(下标范围)As <数据类型>]……其中:维界定义的形式:[下界1to]上界1[,[下界2to]上界2]……例如:Dima(1to5)Asinteger本语句说明了一个一维a数组,有5个元素,分别为a(1),a(2),a(3),a(4),a(5)又例如:Dimb(1to2,1to3)AsSingle,c(3)AsInteger,d(3to5)本语句说明了三个数组:二维数组b:有2行3列,6个元素分别为:b(1,1)b(1,2)b(1,3)b(2,1)b(2,2)b(2,3)一维数组c:有4个元素:c(0)c(1)c(2)c(3)一维数组d:有3个元素:d(3)d(4)d(5)使用说明:ll        下界缺省时,为0。ll        若在窗体或标准模块的所有过程之前书写下列语句:OptionBase1则下界缺省值为1。ll        下界1或下界2只能是常量,不允许是变量或其它表达式。 5.2数组的基本操作P92 5.2.1数组元素的赋值1.用赋值语句给数组元素赋值例:P92 DimScore(3)AsIntegerDimTwo(1,1to2)AsIntegerScore(0)=80Score(1)=75Score(2)=91Score(3)=68Two(0,1)=Score(0)PrintTwo(0,1) 22         通过循环逐一给数组元素赋值例: PrivateSubForm_Click()DimA(6)AsInteger,iAsIntegerDimB(1To2,1To2)AsInteger,jAsIntegerFori=0To6'使用循环给一维数组赋值并输出A(i)=Int(99*Rnd)+1PrintA(i)NextiPrintFori=1To2'利用二重循环给二维数组赋值并输出Forj=1To2B(i,j)=i*10+jPrintB(i,j);NextjPrintNextiEndSub  23         用InputBox函数给数组元素赋值 PrivateSubForm_Click()DimA(6)AsInteger,VAsVariantFori=0To6A(i)=InputBox("给数组元素赋值","数组A赋值")PrintA(i);NextiPrintEndSub 4用Array函数给数组赋值Array函数的一般使用形式如下:〈变体变量名〉=Array([数据列表])功能:将一个数据集赋给一个Variant变量,并将该变量创建成一个一维数组。例P93OptionBase1PrivateSubForm_Click()DimAAsVariant,IAsIntegerDimB(4)AsVariantA=Array(5,4,3,2,1)PrintA(1);A(2);A(3);A(4);A(5)A=Array(1.5,2.3,3.6,4.1)PrintA(1);A(2);A(3);A(4)A="NOArray"PrintA'B=Array(1,2,3,4,5,6)‘注意A与B的区别EndSub5.2.2数组元素的输出例:一维数组的输出二维数组的输出P94OptionExplicitOptionBase1PrivateSubForm_click()DimkAsInteger,iAsIntegerDimA(4,5)AsInteger,JAsInteger,SAsString'生成数组k=10Fori=1To4IfiMod2<>0Then'处理奇数行ForJ=1To5k=k+1A(i,J)=kNextJElseForJ=5To1Step-1'处理偶数行k=k+1A(i,J)=kNextJEndIfNexti'数组输出IfCheck1.Value<>1ThenFori=1To4'输出到图片框ForJ=1To5 Picture1.PrintA(i,J);NextJPicture1.PrintNextiElseFori=1To4'输出到多行文本框ForJ=1To5S=S&Str(A(i,J))NextJS=S&Chr(13)&Chr(10)NextiText1.Text=SEndIfEndSub5.2.3数组元素的引用例5-1P95OptionExplicitOptionBase1PrivateSubForm_Click()DimCompare(12)AsInteger,iAsIntegerDimMaxAsInteger,MinAsIntegerRandomizeFori=1To12Compare(i)=Int(90*Rnd)+10PrintCompare(i);NextiPrintMax=Compare(1):Min=Compare(1)Fori=2To12IfCompare(i)>MaxThenMax=Compare(i)ElseIfCompare(i)Sort(J)ThenTemp=Sort(I)Sort(I)=Sort(J)Sort(J)=TempEndIfNextJText2=Text2&Str(Sort(I))NextIText2=Text2&Str(Sort(10))EndSub  OptionExplicitOptionBase1PrivateSubCmdSort_Click()DimSort(10)AsInteger,TempAsIntegerDimIAsInteger,JAsIntegerDimPointerAsIntegerRandomizeForI=1To10Sort(I)=Int(Rnd*(100-1))+1Text1=Text1&Str(Sort(I))NextIForI=1To9Pointer=IForJ=I+1To10IfSort(Pointer)>Sort(J)ThenPointer=JEndIfNextJIfI<>PointerThenTemp=Sort(I)Sort(I)=Sort(Pointer)Sort(Pointer)=TempEndIfText2=Text2&Str(Sort(I))NextIText2=Text2&Str(Sort(10))EndSub  例:5-4顺序查找程序(界面见P105)先介绍ForEach–next结构的语句:OptionExplicitOptionBase1DimSearchAsVariantPrivateSubCmd生成数组_Click()DimIAsInteger,ElementAsVariantSearch=Array(34,12,56,81,59,83,91,26,47)ForEachElementInSearch‘foreach-next结构语句见P90Text1=Text1&Str(Element)NextElementEndSubPrivateSubCmd查找_Click()DimIAsInteger,FindAsInteger Text2=""Find=InputBox("输入要查找的数")ForI=1ToUBound(Search)IfSearch(I)=FindThenExitForNextIIfI<=UBound(Search)ThenText2="要查找的数"&Str(Search(I))&"是Search("&Str(I)&")"ElseText2="在数列中没有找到"&Str(Find)EndIfEndSub 例5-5二分查找程序:OptionExplicitOptionBase1DimSearchAsVariantPrivateSubCmd二分查找_Click()DimLeftAsInteger,RightAsIntegerDimMidAsInteger,FlgAsBooleanDimFindAsIntegerFind=InputBox("输入要查找的数")Left=1:Right=UBound(Search)Flg=FalseDoWhileLeft<=RightMid=(Left+Right)/2IfSearch(Mid)=FindThenFlg=TrueExitDoElseIfFind>Search(Mid)ThenLeft=Mid+1ElseRight=Mid-1EndIfLoopIfFlgThenText2="要查找的数"&Str(Find)&"在Search("&Str(Mid)&")中"ElseText2=Str(Find)&"不在数组中"EndIfEndSub PrivateSubCmd生成数据_Click()DimVAsVariantSearch=Array(12,17,23,28,30,39,41,46,57,61,78,83,85,89,93)ForEachVInSearchText1=Text1&Str(V)NextVEndSub 例5-7求裴波拉契数列。OptionBase1OptionExplicitPrivateSubForm_Click()DimFb(18)AsInteger,IAsIntegerFb(1)=1:Fb(2)=1ForI=3To18 Fb(I)=Fb(I-2)+Fb(I-1)NextIForI=1To18Text1=Text1&Str(Fb(I))&""NextIEndSub 例5-8:  OptionExplicitPrivateSubCommand1_ClicK()DimStAsString,IdxAsIntegerDimA(0To25)AsIntegerDimIAsInteger,jsAsIntegerDimCHAsString*1,LAsIntegerSt=Text1.TextL=Len(St)ForI=1ToLCH=Mid(St,I,1)IfCH>="A"AndCH<="Z"ThenIdx=Asc(CH)-Asc("A")A(Idx)=A(Idx)+1ElseIfCH>="a"AndCH<="z"ThenIdx=Asc(CH)-Asc("a")A(Idx)=A(Idx)+1EndIfPrintA(Idx)NextIForI=0To25IfA(I)<>0Thenjs=js+1Text2=Text2&Chr(I+Asc("A"))&":"&Str(A(I))&""IfjsMod5=0ThenText2=Text2&Chr(13)&Chr(10)EndIfNextIEndSub 5.3动态数组动态数组:大小可以改变的数组 1动态数组说明的一般格式:(说明数组时不指明维数及下标范围)dim数组名()[as数据类型]当可以确定数组元素大小时对动态数组再次说明,用如下重定义数组语句:ReDim[Preserve]数组名(维界定义)[As数据类型]说明:当重新定义数组后,要保留原来数组中的数据,则选择preserve选项。例如:DimPin()AsIntegerprivateSubform_click()ReDimPin(5)……EndSub 例:有一组数,以-999结束,编程找出其中正数、负数、零的个数。(-999不作为数据处理) PrivateSubForm_click()Dimx()AsInteger,nAsIntegerDimn1AsInteger,n2AsInteger,n3AsIntegern=1 DoReDimPreservex(n)x(i)=InputBox("请输入一个数")Printx(i);Ifx(i)=-999ThenExitDoIfx(i)<0Thenn1=n1+1ElseIfx(i)=0Thenn2=n2+1Elsen3=n3+1EndIfn=n+1LoopPrintPrint"小于0的数据个数为:";n1Print"等于0的数据个数为:";n2Print"大于0的数据个数为:";n3EndSub 补充:打印下面的图形:*********************************************  *************** ****************  PrivateSubForm_click()DimiAsInteger,jAsIntegerFori=1To9PrintTab(5);Forj=1To10-iPrint"*";NextjPrintNextiEndSub PrivateSubForm_click() DimiAsInteger,jAsIntegerFori=1To5PrintTab(5);Forj=1ToiPrint"*";NextjPrintNextiEndSub  PrivateSubForm_click()DimiAsInteger,jAsIntegerFori=1To4PrintTab(9-i);Forj=1To2*i-1Print"*";NextjPrintNextiEndSub  5.4控件数组一、控件数组:由一组具有共同名称和相同类型的控件组成。二、建立控件数组方法:1复制现存控件:在窗体上绘制控件数组中第一个元素的控件→设置它的名称属性→右键单击此对象→复制→右击窗体→粘贴。(重复复制操作)将已存在的控件组成一个数组。(同一类型的控件)确定第一个元素→选定要包含在控件数组中的其它对象→将它的名称属性设置成和第一个元素相同。(重复此操作)说明:1控件数组中的每个元素下标为此控件的index属性值(≤32767)控件数组中的每个控件共享一个事件过程。 例5-2P101第六章  程序调试 6.16.1   程序调试的基本概念6.1.1错误类型:1、语法错误:指违反了语言有关语句形式或使用规则而产生的错误。如:语句格式错误;语句定义符拼错等等。例:forI=120forI=to202、运行错误:执行一个不可进行的操作而引起的错误。使用一个不存在的对象;或使用一个某些关键属性没有正确设置的对象等。3、逻辑错误:程序代码运行后不能得到预期结果。其中1、2错误会使程序中断,并有一个出错的消息框出现。6.1.2VB调试工具:1、设置自动语法检查:(让系统帮助检查程序中的语法错误)方法:工具→选项→编辑器标签→在代码设置栏中选中“自动语法检测”→确定。2、VB调试工具:程序调试工具栏的显示/不显示: 方法一:视图→工具栏→调试。方法二:右键单击任一工具栏工具钮或菜单栏任一菜单→调试。调试工具栏上各按钮功能见P1196.2程序调试:6.2.1中断:中断:程序在执行中途被停止,称为“中断”。中断产生的原因:(1)程序运行时发生运行错误。(2)程序运行中用户使用了[Ctrl]+[Break]命令。用户在程序中设置了断点。断点设置/取消方法:将光标移到需要中断的那一行→单击调试工具栏上切换断点工具按钮。(4)用户在运行程序时采用了单步调试方式。使中断后的程序继续执行的方法:单击继续工具按钮。中断状态的作用:用户可查看程序中各个变量及对象属性的当前值;还可对程序的错误(代码、属性等等)进行修改。2.三种调试窗口的使用方法:在中断态使用三种调试窗口对程序进行调试可提高程序调试的效率。是程序调试的有效手段。(1)本地窗口:本地窗口中可显示当前过程中所有局部变量的当前值及各对象属性的当前值。本地窗口的显示:中断时单击调试工具栏上的本地窗口工具按钮。使用方法:在程序中设置断点,然后运行。执行到中断处显示本地窗口进行查看。(2)监视窗口:用于查看指定表达式(监视表达式)的值。(可查看程序中所有变量、函数、表达式的值)指定监视表达式的方法:调试菜单→添加监视→输入监视表达式→确定所在位置→确定所属类型→确定。监视窗口的使用方法:先指定监视表达式→运行程序→程序执行到中断处显示出监视窗口→查看其中各表达式的值。监视表达式的修改:调试菜单→编辑监视→在对话框中进行修改。(3)立即窗口:用于显示当前过程中的有关信息。可在程序中用debug.print语句将程序中变量或属性值显示在立即窗口中。可在立即窗口中用print方法显示程序中变量或属性值。可在立即窗口输入代码并执行它。(4)单步执行程序的方法:先选择单步执行方式,然后执行程序。单击工具栏上的逐语句工具按钮、触发某事件使系统开始执行事件代码、F8、单击本地窗口、F8、F8、F8……..例:本程序的功能用于生成二维数组a(4,4),数组元素为一位随机整数,并对每一列数组元素求和。OptionExplicit PrivateSubForm_click()RandomizeDima(4,4)AsInteger,sAsIntegerDimiAsInteger,jAsIntegerFori=1To4Forj=1To4a(i,j)=RndPrinta(i,j);Nextj PrintNextiFori=1To4s=0Forj=1To4s=s+a(i,j)NextjPrint"sumof";j;"columnis";sNextiEndSub第七章第七章  文件 问题:1、用inputbox函数给变量赋值,则此值应该从?输入?X=inputbox(“请输入一个数“)x的值何处来?2、printx:将结果送入到何处?Text1.text=y将结果送入到何处?上述12问题,对于程序中数据的来源和去向,VB还提供了另一途径,文件。数据文件:存放数据的文件。数据文件的类型:顺序文件、随机文件、二进制文件。 7.1文件管理控件1、驱动器列表框:可以列出目前计算机上所有的驱动器。用来帮助用户查找文件。驱动器列表框在控件工具箱中的图标P20,在窗体中的形式。 属性:名称:Drive:其值表示用户在驱动器列表中所选的驱动器。用户也可在程序中通过修改它的值和与ChDrive驱动器名语句配合来改变当前驱动器。取值:用户计算机的所有驱动器名。形式:A:C:D:E:等等。例如:OptionExplicitPrivateSubForm_click()Drive1.Drive="D:"ChDriveDrive1.DriveEndSub(此处驱动器名加双引号)在操作系统级改变当前驱动器。说明:1、在设计态无法改变其值,只能在程序代码中设置2、在运行态,当用户单击驱动器列表框中的某一项时,将改变drive的属性值。 事件:Change:当驱动器号改变(drive属性值改变时),将触发Change事件。2、目录列表框:显示用户系统的当前驱动器的目录结构,并突出显示当前目录。目录列表框在控件工具箱中的图标P20,在窗体中的形式。属性:名称:常以“Dir”作为前缀。Path:用来设置和返回目录列表框中的当前目录。在程序中用下列语句改变当前目录:<目录列表框名称>.Path=路径例:Dir1.Path=”c:Programfilesdevstudio”说明:1、在设计态无法改变其值,只能在程序代码中设置其值。2、在运行态,当用户双击(不是单击)目录列表框中某一项时,将改变Path的属性值3、目录列表框中显示的内容与驱动器列表框中当前驱动器的内容应保持一致。通过下列语句实现同步:<目录列表框名>.Path=<驱动器列表框名>.Drive事件:Change:当Path属性值发生变化时,将引发此事件。应该在此事件过程中编写代码,将目录列表框的Path属性值指定给文件列表框的Path属性。 3、文件列表框:用来列出由文件列表框的Path属性指定目录中的文件。文件列表框在控件工具箱中的图标P20,在窗体中的形式。属性:名称:通常以“File”作为前缀。Path:用来设置和返回文件列表框中所显示文件的路径。语句格式:File1.Path=Dir1.Path说明:1、在设计态无法改变其值,只在程序代码中改变其值。2、文件列表框中显示的内容与目录列表框中当前目录的内容应保持一致。通过下列语句实现同步:<文件列表框名>.Path=<目录列表框名>.PathPattern:P129例:在窗体上放置以上三个控件,填写下面程序代码实现同步。PrivateSubDir1_Change()File1.Path=Dir1.PathEndSub PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSub 二、文件处理:文件:一组相关信息的集合。(本章所述文件是指存放在磁盘上一组相关的数据集合。) 1、文件访问类型:(1)顺序文件:文件中数据是以ASCII码方式存储的。(.txt文件)特点:其中的数据只能顺序地访问。(访问:指读或写)23,45,67,89 (2)随机文件:由一组相同长度的记录组成。文件中数据以二进制方式存储的。特点:其中的数据可随意访问。(3)二进制文件:存储任意希望存储的数据。特点:1、其中的数据是顺序访问的。2、与随机文件相比,不必定义多个数据组成的一条记录的类型,不必指明它的长度。 2、文件访问的语句和函数:P132 三、顺序文件:1.顺序文件的写操作:写语句:格式1:print#文件号,[[SPC(N)|TAB(N)][输出项1],/;[输出项2],/;..]其中:输出项为数值或字符串表达式。有spc(n)、tab(n):教材P140功能:以标准或紧凑格式将各输出项的值写入指定文件号所关联的文件中去。例:实验指导书P73练习10-5计算面积程序:OptionExplicitDimx(5)AsSingle,y(5)AsSingle PrivateSubForm_Click()DimiAsInteger,sAsSingleClsFori=1To5x(i)=InputBox("请输入第"+Str(i)+"个顶点的横坐标")y(i)=InputBox("请输入第"+Str(i)+"个顶点的纵坐标")Print"第"+Str(i)+"个顶点坐标:("+Str(x(i))+","+Str(y(i))+")"NextiFori=1To3s=s+tri(x(i),y(i),x(i+1),y(i+1),x(i+2),y(i+2))NextiPrint"五边形面积为=";sEndSub PrivateFunctiontri(x1,y1,x2,y2,x3,y3)AsSingleDimpAsSingle,qAsSingle,rAsSingleDimsAsSinglep=Sqr((x1-x2)^2+(y1-y2)^2)q=Sqr((x2-x3)^2+(y2-y3)^2)r=Sqr((x3-x1)^2+(y3-y1)^2)s=(p+q+r)/2tri=Sqr(s*(s-p)*(s-q)*(s-r))EndFunction 运行结果:若将运行结果的最后一行以area.txt写入软盘根目录中,如何修改上述程序?(1)增加语句:open“a:area.txt”foroutputas#1 (2)改语句:Print#1,"五边形面积为=";s(3)增加语句:close#1(4)顺序文件的查看:用记事本、写字板、word等文字处理系统以纯文本格式打开它。(最好用记事本) 说明:1、数值型数据输出时前有符号位,后留有一个空格。2、若双引号或逗号本身就是字符串中的字符,以及字符串中前后有空格符,则写入到文件中的字符串前后应该写入双引号符。(例P141)字符串数据的输出:P140自学。书上P134例:格式2write#文件号,[输出项1[,/;输出项2][,/;输出项3]...]其中:输出项为数值或字符串表达式。功能:将各输出项的值写入到指定文件号相关联的文件中去。 例:修改上述程序:将最后一条print语句改为write语句: 说明:P1411、输出项之间用,或;分隔无区别,write总是用紧凑的格式输出输出项,且将它们用逗号隔开。2、输出项是字符串时,自动加“”作为分隔符。数值输出项的前后不再留有空格。3、此语句输出的数据便于读出。2:顺序文件的读操作:格式(1)input#文件号,变量名1[,变量名2]...功能:从打开的指定文件号的文件中读出数据赋给相应的变量。 例:从a:area1.txt文件中读出数据并在窗体上显示出来。PrivateSubForm_Click()DimcAsString,xAsSingleOpen"a:area1.txt"ForInputAs#2Input#2,c,xPrintc,xEndSub 说明:P142 例7-2(P142) 格式(2)lineinput#文件号,变量名功能:从一个打开的顺序文件中,读出一行数据给一个字符型变量或变体变量。(通常使用本语句读出用print输出到顺序文件中去的一行数据)注:此语句中只能有一个变量名。例:从a:area.txt文件中读出一行数据。 PrivateSubForm_Click()DimcAsString,xAsSingleOpen"a:area.txt"ForInputAs#2LineInput#2,c PrintcEndSub 说明:P143自学。例7-37-47-57-6自学。补充例:将任意个数的一组数(数据自定)写入a:data1.dat顺序文件中,当输入数据为-999时结束,并将文件中所有数据读出在窗体上显示出来。PrivateSubForm_Click()Dimx()AsInteger,y()AsInteger,filenumberAsIntegerDimiAsInteger,nAsIntegerfilenumber=FreeFileOpen"a:data1.dat"ForOutputAsfilenumberDoi=i+1ReDimPreservex(i)'重新说明数组x,并保留其中原有的所有元素值。x(i)=InputBox("请输入一个数")Ifx(i)<>-999ThenWrite#filenumber,x(i)ElseExitDoEndIfLoopClose#filenumberi=0filenumber=FreeFileOpen"a:data1.dat"ForInputAsfilenumberDoWhileNotEOF(filenumber)i=i+1ReDimPreservey(i)Input#filenumber,y(i)Printy(i)LoopCloseEndSub 7.4随机文件: 记录:有固定结构的、固定长度的一组数组组成。记录数据的结构有2种:(1)由单一标准数据类型构成的记录内容。24568976(2)由各种各样多个数据构成的记录如:001张华85:此记录类型是由用户自定义的。由几个字段构成,(其中字段又称为域)学号姓名数学1、定义记录类型:在标准模块中用下列格式定义:type记录类型名 字段名1as数据类型字段名2as数据类型…字段名nas数据类型endtype 如上例:typestudent_scorestudent_idasstring*6nameasstring*8mathasintegerendtype除了定义记录类型外,还需定义相应的变量,如上例:在标准模块或窗体模块中定义变量:publicscoreasstudent_score则记录中各字段的表示:score.namescore.math等等。2、随机文件的写操作:语句格式:put#文件号,[记录号],变量(此处应为记录型变量)功能:将变量的值写到指定的文件(随机或二进制)中去。说明:P152。**写入记录变量之前要先将记录中各字段赋值。3、随机文件的读操作:语句格式:get#文件号,[记录号],变量(此处应为记录型变量)功能:将指定记录号的记录值赋给变量。**读出的记录输出时要输出其中各字段的值。 例:输入3名学生数据写入a:fileR.txt随机文件中,并从文件中读出数据在窗体上输出。PrivateSubForm_Click()DimiAsInteger,recordnoAsIntegerOpen"a:file1.txt"ForRandomAs#1Len=16Fori=1To3score.student_id=InputBox("请输入学号")score.name=InputBox("请输入姓名")score.math=Val(InputBox("请输入数学成绩"))Put#1,i,scoreNextii=1Cls(’或使用refresh)DoWhileNotEOF(1)Get#1,i,scorePrinti,score.student_id,score.name,score.mathi=i+1LoopCloseEndSub 如何去掉上述程序中多显示的一条记录呢?将cls以下的程序段改为下列程序段:Fori=1ToLOF(1)/16‘其中LOF(1)/16得到指定文件的最后一条记录的记录号。Get#1,i,score Printi,score.student_id,score.name,score.mathNexti4、增加、删除随机文件中的记录:(1)增加记录:自学如何获得最后一条记录的记录号?(2)删除记录:自学7.5二进制访问模式 •二进制文件的打开语法格式:Open“文件名”[ForBinary]As#文件号•二进制文件的关闭关闭二进制文件操作与关闭其他文件相同•写操作对二进制文件的写操作必须使用Put命令Put[#]文件号,[位置],变量名•读操作对二进制文件的读操作是Get命令和INPUT函数Get[#]文件号,[位置],变量名INPUT(字节数,#文件名)•定位操作(SEEK函数与Seek命令)SEEK(文件号);Seek[#]文件号,位置例7.6 PrivateSubForm_click()DimnameAsString*10Open"student.dat"ForBinaryAs1Doname=InputBox("请输入学生姓名:")Put#1,,nameyes=InputBox("继续输入吗?(Y/N)")LoopWhileUCase(yes)="Y"Close#1EndSub例7.7PrivateSubForm_Click()Open"student.dat"ForBinaryAs1flength=LOF(1)Char=Input(flength,#1)PrintCharClose#1EndSub第八章过程概述程序设计方法就象搭积木,先设计好一块块形状各异的小积木(程序段),然后将它们组合起来构成完整程序。过程:可以实现某种功能的程序段,在程序设计中称这些程序段为逻辑部件,VB中称这些逻辑部件为过程。过程分类:Sub过程Function过程Property过程  8.1Sub过程 Sub过程分类:事件过程通用过程8.1.1事件过程把对发生的事件进行处理的代码放在过程中,这样的过程称为事件过程。事件过程又分:窗体事件过程控件事件过程窗体事件过程••                        定义窗体事件过程:P157privatesubform_事件名([形式参数列表])[局部变量和常数声明]语句块endsub说明:P157(1)(2)(3)例:教材P34P71P72••            窗体的几个常见事件及其发生的顺序:P158••                        单击启动按钮后启动窗体发生事件的顺序如下:••            Initialize→load→activate••            当窗体获得焦点时发生Gotfocus事件••            说明:••            在多窗体程序中,单击启动按钮时,启动窗体的Initialize、load发生,其它窗体不发生这些事件••            例:设有两个窗体form1form2,form1为启动窗体,运行程序,当从form1的窗体事件中访问form2中的“非可视”数据或调用form2中定义的全局过程时,就会触发form2窗体的form_Initialize事件,当从form1的窗体事件中访问form2中的“可视”数据,就会引发form2的load事件。••            控件事件过程••            定义控件的事件过程:P159••            privatesub控件名_事件名([形式参数列表])••            [局部变量和常数声明]••            语句块••            endsub••            说明:P159(1)(2)••            事件过程的调用••            事件过程的调用:P163••            方法一:由一个发生的事件自动调用。(此过程被执行)••            方法二:由同一模块中的其它过程用下列调用语句显式调用:Call过程名([实在参数表])例:P163 通用过程••                        8.1.2通用过程程序中具有某些独立功能并且必须从另一个过程(事件过程或其它通用过程)显式调用的程序段,称为通用过程。通用Sub过程的定义:P160[private|public][Static]sub过程名([参数列表]) [局部变量和常数声明]语句块[exitsub]语句块endsub••                        说明:P160(1)(2)(3)(4)(5)(6)(7)(8)••                        通用过程的调用:(1)用Call语句调用Sub过程:••                        形式:call过程名(实在参数表)••                        例:P165例8-2••                        (2)把过程作为一个语句来用:••                        形式:过程名[实参1[,实参2……]]••                        例:P165实验指导书P94P98 8.2Function过程定义P162••             [private|public][static]Function函数名([参数列表])as数据类型][局部变量和常数声明][语句块][函数名=表达式][Exitfunction][语句块][函数名=表达式]endfunction说明:P162(1)(2)(3)(4)(5)(6)例:P162例8-18.3函数过程的调用••                        Function过程的调用方法与VB内部函数的调用方法一样,在表达式中写出它的名称和相应的实参。••                        调用形式:P166函数过程名([实参])说明:P166(1)(2)例:P166例8-38.4参数的传递••                        形参:出现在过程定义时过程名后括号中的参数。当过程没有被调用和调用结束后,形参没有存储单元形参的形式:P168(1)变量(定长字符串变量除外)(2)数组(数组名后跟空括号)例P168••                        实参:出现在过程调用时过程名后括号中的参数。实参的形式:(1)可以是变量、常数、表达式、数组元素、对象(2)数组(仅是一个数组名)当过程被调用时,首先完成实参和形参的结合(数据传递) 参数传递••                        参数传递的形式:1按值传递:当过程被调用时,形参获得系统分配的临时存储单元,将实参变量的值复制到这个临时存储单元中。(这时形参和参实各自有自己的存储单元)按值传递发生在:形参前有Byval时例:P1692按地址传递(引用):实参将其所使用的存储单元的地址传递给相应的形参。(这时形参和实参共用同一个存储单元)按地址传递发生在:形参前有Byref或空白。例:P170--171P172P1738.5递归过程••                        递归过程:在过程定义中直接或间接调用自身来完成某一特定任务的过程。例:P176 补充:运行下面的程序,单击窗体后,从键盘上输入字符串“10”,窗体上显示的输出结果为。PrivateSubForm_Click()DimnAsIntegerDims1AsStrings1=InputBox(”输入一个字符串”)n=val(s1)PrintFact(n)EndSub PrivateFunctionFact(mAsInteger)AsLongDimsAsLongIfm=1Thens=1ElseS=Fact(m-1)*mEndIfFact=sEndFunction  8.6变量的作用域••                        变量的作用域:变量在程序的哪些地方有意义。••                        根据定义变量的语句及位置的不同,变量的作用域可分为:过程级变量、模块级变量、全局变量1过程级变量:在过程中声明的变量。其作用域仅限于该过程中。例P177••                        2模块级变量:在标准模块或窗体模块的通用声明段用Private或Dim说明的变量。其作用范围是定义它的模块。例:P178••                        3全局变量:在标准模块或窗体模块的通用声明段用Public语句声明的变量。其作用范围是整个应用程序。例:P179 ••                        4关于同名变量:对于作用域不同而名字相同的变量,优先访问作用范围小的变量。例:P180••                        5静态变量:在过程中用static定义的变量称为静态变量。其作用范围为定义它的过程。 ••                        静态变量的使用说明:1当有静态变量的过程第一次被调用时,数值型静态变量的值为0,字符型静态变量的值为空串。2当有静态变量的过程再次被调用时,静态变量将保持上一次被调用后的值。例:P181 8.78.7       程序示例 P182程序示例:8.8多窗体程序设计••                        多窗体:一个应用程序中包含多个窗体。例:P194••                        设置启动窗体:P197设置启动过程P197第9章图形处理及多媒体应用9.1图形处理9.1.19.1.1   坐标系统VB规定了两种坐标系统:系统坐标系和容器坐标系一、系统坐标系(桌面坐标系)坐标系的单位是特维Twip(1Twip=1/1440英寸)二、容器坐标系窗体、图片框、框架等控件都可包容各种其他控件(容器对象)在容器内移动或改变控件的大小或位置时,使用容器坐标系坐标度量单位由容器对象的ScaleMode属性决定9.1.2色彩1、VB采用对象前景色ForeColor绘图(属性窗口)2、色彩常量(系统内置)VbRed、VbGreen等3、RGB函数RGB(红,绿,蓝)红、绿、蓝三种基本色的成分使用0到255之间的整数,共有256×256×256种颜色如:Label1.ForeColor=RGB(255,0,0)或Label1.ForeColor=VbRed9.1.3绘图控件绘图控件Shape和Line仅用于在窗体或图片框中绘制图形或画线。1、Shape控件Shape控件可以用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形,通过Shape属性可确定所需要的几何形状。(矩形) Shape设置值描述0-Rectangle矩形1-Square正方形2-Oval椭圆3-Circle圆4-RoundRectangle圆角矩形5-RoundSquare圆角正方形 Shape控件的属性属性名功能Name对象引用名Shape设置图形形状BackColor设置图形背景色FillColor设置图形填充色FillStyle设置图形底纹的8种样式BorderColor设置图形边框色Borderwidth设置边框宽度BorderStyle设置边框的7种样式例9-1:图形变换程序PrivateSubForm_Load()'初始化,确定图形的颜色及初始形状DimrAsInteger,gAsInteger,bAsIntegerRandomizer=Int(Rnd*256)‘红色g=Int(Rnd*256)’绿色b=Int(Rnd*256)‘兰色Shape1.FillStyle=0’填充样式设置为实心Shape1.FillColor=RGB(r,g,b)’填充色r=Int(Rnd*256)g=Int(Rnd*256)b=Int(Rnd*256)Shape1.BorderColor=RGB(r,g,b)‘边框颜色Shape1.Shape=0‘设置图形的样式EndSub PrivateSubform_click()StaticiAsIntegeri=i+1Ifi<=5ThenShape1.Shape=iElsei=0Shape1.Shape=iEndIfEndSub 2、Line控件Line控件可以用来画线。步骤如下: (1)单击工具箱中的Line图标;(2)移动鼠标到要画线的起始位置;(3)按下鼠标左键并拖曳鼠标到要画线的结束处,放开鼠标左键。属性名功能Name对象引用名BorderColor设置线的颜色BorderStyle设置线的7种样式(P206)Borderwidth设置线的宽度X1线段端点1的X坐标Y1线段端点1的Y坐标X2线段端点2的X坐标Y2线段端点2的Y坐标例9-2:转动的指针程序PrivateSubForm_Load()Line1.BorderColor=RGB(255,0,0)Line1.BorderWidth=2Timer1.Interval=1000EndSubPrivateSubTimer1_Timer()StaticaAsIntegerDimxAsSingle,yAsSingleConstpi=3.14159265a=aMod360x=1000*Sin(a*pi/180)y=(-1)*1000*Cos(a*pi/180)Line1.X2=x+2160Line1.Y2=y+1440Line1.Refresha=a+6EndSub 9.1.4绘图方法使用绘图方法可在窗体或图片框、打印机上绘图,常见的绘图方法有:画点、画线以及画圆、椭圆等。与绘图相关的属性有:(1)、当前输出的位置CurrentX、CurrentY(运行时属性)绝对坐标:(x,y)相对坐标:step(x,y)(2)、窗体、图形框或打印机的DrawWidth属性给出这些对象上所画线的宽度或点的大小。DrawWidth属性以像素为单位来度量,最小值为1。 1、画点方法Pset方法用于画点,格式如下:[对象.]Pset[Step](x,y)[,颜色]其中:(x,y)为点的坐标;Step表示采用相对坐标;颜色表示绘制点的色彩 采用背景颜色可清除某个位置上的点。例9-3:画彩色点程序PrivateSubCommand1_Click()DimiAsIntegerFori=1To30000CalldrawNextiEndSubPrivateSubdraw()DimrAsInteger,gAsInteger,bAsIntegerDimxAsSingle,yAsSingleDimwAsInteger,hAsIntegerRandomizer=Int(Rnd*256)g=Int(Rnd*256)b=Int(Rnd*256)w=Pic1.Widthh=Pic1.Heightx=Int(Rnd*w)y=Int(Rnd*h)Pic1.PSet(x,y),RGB(r,g,b)EndSub例9-4:清除标签文字PrivateSubCommand1_Click()DimhAsInteger,wAsLong,nAsLong,lAsIntegerDimxAsSingle,yAsSingle,tAsIntegerh=Label1.Height‘标签高w=Label1.Width’标签宽l=Label1.Left‘标签左上角的坐标值t=Label1.TopRandomizeDox=Int(Rnd*w)+ly=Int(Rnd*h)+tPSet(x,y),BackColorn=n+1LoopUntiln>=w*hCommand2.SetFocusEndSub 2、画线方法Line方法用于画直线或矩形,格式如下:[对象.]Line[Step](x1,y1)-[Step](x2,y2)[,颜色][,B[F]]其中:(x1,y1)为起点坐标(x2,y2)为终点坐标Step表示采用相对坐标B表示画矩形F表示用画矩形的颜色来填充矩形(在使用B参数的前提下使用)。如:PrivateSubCommand1_Click() Line(1500,500)-(2500,750)Line-(1750,1500)Line-(1500,500)EndSub例9-5在窗体上绘制0到360度的正弦函数曲线。PrivateSubCommand1_Click()DimxAsSingle,yAsSingle,aAsIntegerConstpi=3.14159265'画X轴Line(450,1500)-(4000,1500)Line(4000,1500)-(3800,1450)Line(4000,1500)-(3800,1550)'画Y轴Line(500,500)-(500,2500)Line(500,500)-(450,700)Line(500,500)-(550,700)'画函数曲线Fora=0To360y=(-1)*Sin(a*pi/180)*500+1500x=a*8+500PSet(x,y),RGB(255,0,0)NextaEndSub 3、画圆方法Circle方法用于画圆、椭圆、圆弧和扇形,格式如下:[对象.]Circle[[Step](x,y),半径[,颜色][,起始角][,终止角][,长短轴比率]]]其中:(x,y)为圆心坐标;Step表示采用相对坐标。半径表示圆的半径或椭圆的长轴半径起始角用于设置圆弧的起始弧度值终止角用于设置圆弧的结束弧度值长短轴比率用于在画椭圆时指定垂直长度和水平长度的比值。注意:省略参数时,逗号不可缺省。PrivateSubCommand1_Click()Constpi=3.14159265DrawWidth=2'设置图形宽度Circle(1000,1000),500,RGB(255,0,0)Circle(3000,1000),500,RGB(255,0,0),-pi/2,-pi/6EndSub 例9-7绘制一个立体饼图PrivateSubCommand1_Click()DimiAsInteger,nAsSingleConstpi=3.14159265FillStyle=4'用斜线填充Circle(2000,1200),1500,RGB(0,0,255),,,0.5Fori=1To100n=i*5Circle(2000,1200+n),1500,RGB(0,120,255),pi,2*pi,0.5 NextiEndSub 9.1.5图形框PictureBox控件的主要作用是为用户显示图片,也可作为其它控件的容器。实际显示的图片由Picture属性决定。1、使用Picture属性显示图片图片框的Autosize属性设为True,则图片框能自动适应图片的大小。2、使用LoadPicure()加载图形。格式如下:图片框对象.Picture=LoadPicture(“图形文件名”)见P2143、使用PaintPicture方法(见P214)用于对加载的图片进行处理。格式如下:[对象.]PaintPicture图片,Dx,Dy[,宽度[,高度[,裁剪图片左上角的坐标值][,裁剪图片的宽度与高度]PaintPicture方法程序示例:PrivateSub裁剪_Click()Pic2.PaintPicturePic1.Picture,0,0,,,1000,1000,2200,2200EndSubPrivateSub水平翻转_Click()Pic2.PaintPicturePic1.Picture,4000,0,-4000EndSubPrivateSub清除_Click()Pic2.ClsEndSubPrivateSub垂直翻转_Click()Pic2.PaintPicturePic1.Picture,0,4000,,-4000EndSubPrivateSub缩小_Click()Pic2.PaintPicturePic1.Picture,0,0,2200,2200EndSub 9.1.6应用鼠标事件当鼠标在对象上时,鼠标按钮的按下、释放及移动,都将引发鼠标的MouseDown、MouseUp和MouseMove事件。注意:鼠标的MouseDown、MouseUp等事件与对象的单击、双击事件不同。鼠标的MouseDown、MouseUp等事件能区分鼠标的左、右和中间按钮,还可识别在鼠标按键同时是否按下Shift、Ctrl和Alt等键。一般鼠标事件的格式为:PrivateSub对象_鼠标事件(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)……EndSub其中:Button:返回一个表示鼠标按键的整数。按左键返回1,按右键返回2,按中间键返回4Shift:返回按控制键的整数。按Shift键返回1,按Ctrl键返回2,按Alt键返回4。X、Y:返回鼠标当前位置的X、Y坐标值 鼠标事件应用举例: DimPaintNowAsBooleanPrivateSubForm_Load()DrawWidth=10‘设置刷子宽度ForeColor=RGB(0,0,255)’设置绘图颜色EndSubPrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)PaintNow=True’启动绘图EndSubPrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)PaintNow=False‘关闭绘图EndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfPaintNowThenPSet(X,Y)‘画一个点EndIfEndSub 9.2多媒体应用 VB多媒体控件不包含在标准控件箱中,以ActiveX控件(部件)形式出现。加载的方法是:单击“工程”→“部件”命令,在打开的对话框中选择需要使用的部件。与多媒体相关的ActiveX控件使用较多的有两个:1、动画Animation控件2、媒体控制器MCI控件一、使用动画控件1、在工具箱中添加动画控件在“部件”对话框中选定“MicroSoftWindowsCommonControls-26.0”2、动画控件的方法使用动画控件可播放无声“.avi”数字电影文件●Open方法:打开要播放的文件●Play方法:播放●Stop方法:停止●Close方法:关闭3、动画控件常用属性●Center属性:设置动画播放的位置,值为True,表示播放画面在动画控件的中间位置●AutoPlay属性:设定已打开动画文件的自动播放例9-8播放无声动画的程序DimfnameAsStringPrivateSubcmdopen_Click()'设置公共对话框显示的文件类型CommonDialog1.Filter="无声.avi文件(*.avi)|*.avi|"'显示打开文件对话框CommonDialog1.ShowOpen'将从公共对话框中选定的文件名赋给fname变量fname=CommonDialog1.FileNameEndSubPrivateSubcmdplay_Click()'打开要播放的文件 Animation1.Openfname'执行播放Animation1.PlayEndSubPrivateSubcmdstop_Click()'停止播放Animation1.Stop'关闭文件Animation1.CloseEndSub二、多媒体控件多媒体控件是用于管理、控制各种MCI设备的控件。MCI支持的主要多媒体设备见P222表9-6所示。1、向工具箱添加多媒体控件在“部件”对话框中选定“MicroSoftMultimediaControl6.0(mp3)”2、使用多媒体控件●Enabled与Visible(False)●DeviceType与AutoEnable●FileName●Command:运行时使用的属性,指定需要执行的MCI命令(表9-7) 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭