1、Visual Basic程序设计,主讲教师:唐大仕http:/,北京大学远程教育课程,参考书,Visual Basic 程序设计, 唐大仕,北方交大、清华大学出版社,2002,教学进度安排(45学时),1. 序论2. 数据与运算 3. 语句与分支控制4. 循环语句5. 过程与函数(上) 6. 过程与函数(下)7. 数组与常用算法,教学进度安排(续),8. 常用控件 9. 绘图、窗体与菜单10. 复杂界面11. 文件、程序调试12. API及多媒体编程 *13. 数据库编程 *14. 网络编程及其他 *15. 复习,第1讲 序论,程序与语言的概念,为什么要学习程序设计软件=程序+文档程序语言汇编
2、语言 asm 高级语言 c, pascal, fortran, 面向对象的语言 c+, java,Visual Basic简介,一种程序设计环境一种程序设计语言具有广泛的用途,VB 快速入门单击右击双击,示例:按钮信息,编程提示: 要用西文标点点启动按钮才会运行,设计与运行,界面设计(插入对象,设其属性)(对象窗)程序代码(双击对象,填写代码)(代码窗)运行按F5(或点启动按钮),保存,保存窗体文件.frm工程文件.vbp其他辅助文件编程提示:文件应保应在自已的文件夹中,不要放在VB98下每个程序放在单独的文件夹中下次打开这个程序,只需双击.vbp文件即可,编译,编译Make .Exe文件/生
3、成xxxxx.exe文件编程提示:exe是交给最终用户的,编程者不需要它,VB程序设计环境,工程窗口 对象窗口属性窗工具箱代码窗,VB三种状态,编辑状态(edit)运行状态(run)中断状态(break),使用帮肋,按F1键 MSDN教程网络上的资源www.vb-,VB中的对象,属性 (property)方法 (method)事件 (event),属性与方法的书写,对象.属性对象.方法 示例:.move .ForeColor rgb 及 rnd示例 print,事件,Sub objName_EventName()事件驱动示例 : event_drive.frm& “”,示例:事件改变属性,改变
4、字体、大小、颜色其中 等号(= )表示赋值,小结,Visual Basic程序设计语言Visual Basic程序设计环境Visual Basic程序设计核心概念:对象:属性、方法、事件事件驱动,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第2讲 数据与运算,本讲内容,进一步理解对象数据类型常量与变量运算符,进一步理解对象,对象命名,对象名对象名(Name)与文字(Caption/Text)不同窗体名.控件名,匈牙利命名法,对象命名的惯例:匈牙利命令名法前缀(表类型) + 单词(表意义) btnSayHello btnOk cmdOkbtn 按钮 lbl 标签 t
5、xt 文字框pic 图片 frm 窗体 lst 列表框tmr 定时器 scr 滚动 chk 复选框,特殊对象名,事先定义好的对象 Me, Screen, Printer , App, Debug注:Me表示当前窗体Me.可省略编程技巧: Ctrl+J 快速提示 F2 对象浏览,几种常用对象,按钮 CommandButton btn标签 Label lbl文本框 TextBox txt图片框 PictureBox pic,常见的属性,NameForeColor, BackColor FontSize FontName Top Left Width HeightCaption/ Picture/
6、Text / ValueVisiable Enabled,默认属性,对象有一个默认属性(属性值)如:Label的Caption, Text的Text如: Text1.Text = . 可写为 Text1 = .,常见的方法,Move (适用于各种控件)Print (适用于窗体及图片框)Show / Hide (适用于窗体),常见的事件,有关Mouse, keyboard,有关选择,文字改变,事件驱动编程,对象之间的相互作用示例:两个文本框显示同样的文本文本框的事件跳动的小球Shape形状对象: Shape FillColor FillStyleTimer计时器对象: Interval,数据与运
7、算,数据:常量与变量数据的类型数据的含义不同数据的运算不同数据的存储方式不同,数据类型,类型 类型符 前缀 占字节数字节型 Byte b 1 (0-255)整型 Integer % i 2 (-3276832767) 长整型 Long & l 4单精度 Single ! s 4双精度 Double # dbl 8,数据类型(续),逻辑型 Boolean 2 True/False日期型 Date 8字符串型 String 后缀 $对象型 Object变体型 Variant,变量,变量的含义变量的名字用字母、数字、下划线构成不能用数字开头,变量的定义,隐式定义不定义而直接赋值a = 99*99显式
8、定义:使用DimDim a As IntegerDim iCount% As IntegerDim studentName As String*8注:还有Private, Public, Static等词可以定义变量(以后会讲到),Option Explicit,该语句表示变量必须显示定义它必须放在程序中的第一句使用它可以减少程序中的错误,字面常量,整数、实数 类似于数学中的写法如 123 -45 123.45 2.3E-5十六进制 &H0027D9长整数 1234&日期 #9:21:30 PM# #7/21/99# 逻辑 True False字符 Hello A ,符号常量,Const Pi
9、 As Double =3.14,较高要求(*),自定义类型用于表示多个数据的组合Private TypeEnd Type枚举用于表示有限个常量Private EnumEnd Enum,运算符,算术运算 + - * / mod(取余)(乘方)字符串连接 & +关系运算 = 逻辑运算 And Or Not,表达式,表达式举例:参 表达式.txt,运算符的优先级与结合性,优先级(从高到低):算术运算(其中 */ +- )关系运算逻辑运算(其中NotAndOr)结合性从左向右,程序的基本过程:,输入处理输出示例:圆的面积 InputBox, MsgBox 示例: a *b = c,示例,求解一元二次
10、方程,小结,进一步理解对象数据类型常量与变量运算符,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第3讲 语句与分支控制,本讲内容,简单语句输入及输出If/ElseIf语句Select Case语句,VB语言,程序设计语言的两个重要方面:数据控制,简单语句,简单语句一句一行多句同行 (用: )一句跨多行(用 _ ),注释,对程序的执行没有影响用单引号开始,直到行尾注释的用途:对一段程序对一些变量对一些算法,赋值语句 =,示例: a=a+1 示例: 移动的小球示例:交换两变量值,输入与输出,程序的基本过程:输入处理输出输入输出的常见方法:使用控件进行输入输出使用Inp
11、utBox, MsgBox 使用Print,Print的使用,Print换行不换行(,或;)相关函数Space, Tab, Format示例:圆的面积方法 Print, cls , 与; 示例: a *b = c,If条件语句,两种写法:同一行: If 条件 Then Else 多行: If 条件 Then Else End If示例:小球示例:闰年,条件语句嵌套,条件语句的嵌套示例:性别,年龄的判断示例: 判断圆的半径编程提示:使用Tab键正确地缩进,ElseIf,示例:分数的判断示例:所得税的计算,Select Case,Select case 表达式 case 常量 。 case 常量
12、。 case else . End Select示例: 分数,示例: 自动出题及判分,加减乘除If 及 Select 的使用随机数的使用Rnd 及 Randomize,IIF函数,IIf(条件, 式1, 式2 )Choose( 数a,式1, 式2, ) Switch(条件1,表达式1,条件2,表达式2,),小结,简单语句输入及输出If/ElseIf语句Select Case语句,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第4讲 循环语句,本讲内容,控制结构与流程图For Next语句Do Loop语句循环出口语句循环的嵌套循环的应用-数列求和,三种控制结构,为什
13、么要有循环程序的三种控制结构顺序分支(选择)循环,程序流程图,流程线开始与结束任务及子任务输入与输出条件判断,For语句,For v=1 To 100 Step 2 Next其中 Step 1可以省略,使用 For语句,示例 显示1-100画同心圆1+2+1001*1+2*2 +.+100*10063+.+693,Do Loop,Do While 条件 。Loop 示例:角谷猜想,Do 循环的几种写法,Do While 条件 (或:Until条件) 。Loop Do 。(至少执行一次循环)Loop While 条件 (或:Until条件)While 条件。Wend,循环的五要素,初始化循环条件
14、循环动作循环改变结束后处理,理解循环,1变量 5要素 3典型几种循环的比较,循环出口语句,Exit For示例: 判断质数Exit Do其他几个相关的语句:Exit Sub退出此段Sub子程序End结束整个程序Stop停止执行,进入中断状态,循环的嵌套,示例九九乘法表画图1! +2! +. +10!2-100以内的角谷猜想内外循环的关系每重循环的控制变量控制变量间的关系,循环的应用,数列求和: -递推法1! + 2! +. + 10!2+22+222+Exp_sumPi/2Pi/4,程序的3种结构,顺序选择(分支)循环,编码约定,变量名 Option Explict 匈牙利命名法:类型及含义
15、注释 使用针对一段程序或一条语句 缩进 编进空格、空行,GoTo语句,GoTo 标号或行号标号:。On 表达式 GoTo 行号,标号,尽量少用GoTo语句,小结,控制结构与流程图For Next语句Do Loop语句循环出口语句循环的嵌套循环的应用-数列求和,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第5讲 过程与函数(上),本讲内容,过程函数参数传递过程中的变量,过程,学习 VB语言:单词语句篇章使用过程的好处任务分解代码重用,事件过程与普通过程,事件过程与某个对象事件相关过程名为: 对象名_事件名如: Sub Command1_Click()如: Sub F
16、orm_Load()普通过程与事件无关表示某项任务,过程的定义,Sub 过程名(参数 As 类型,。) 。End Sub,过程的调用,使用Call Call 过程名 (参数值。) 注意,要用括号或省略Call过程名 参数值,。 注意,不用括号示例:sub_print100示例:sub_delay 注:second, do loop,函数,函数也是一种子程序是一种带返回值的过程内建函数已由VB定义好,可直接使用如: CInt(), Int(), Rnd(), Now(),函数的定义,Function 函数名(参数,。)As 类型 。其中有一句 : 函数名=某个值End Function,函数的调
17、用,一般用于表达式: 函数名 (参数值。) 用括号如果忽略结果,也可以当过程来调用: 函数名 参数值,。 示例:fac1_10_fun:求1!+2!+10!prime_fun:求100以内的质数,参数的传递,形参与实参参数的传递按位置传送按名传送(*)变量名:=值,传值与传址,传值 ByVal 传址 ByRef (缺省为ByRef)示例简单示例fun_digi2Sum,特殊的参数,可选参数(*)Optional可变参数(*)ParamArray xxxx(),模块,模块工程/添加模块工程/属性/启动对象模块中的变量/过程模块名.过程名Public 与 Private 过程过程缺省是Public
18、的,变量的作用域,作用域(可见性)全程变量 Public 或 Global 窗体级变量 Private 或 Dim局部变量 Dim示例,变量的生存期,生存期普通变量 有产生和消失静态变量(Static) 不消失Static 函数或过程 其中所有变量为static示例,小结,过程函数参数传递过程中的变量,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第6讲 过程与函数(下),-常用函数,本讲内容,I/O函数数学函数字符函数日期时间函数转换函数,再谈使用帮助,F1 使用MSDNF2 浏览对象Ctrl+G 立即窗口其中使用Print 或 ?来显示一个表达式,I/O函数,M
19、sgBox有关按钮图标/有关返回值MsgBox hello, vbInformationInputBox有关默认值/有关返回值a = InputBox( Please Input a num, , 99)Beep附:Enum枚举的定义例: Enum_weekday,数学函数,RndInt(Rnd * 9) + 1, RandomizeSqr, AbsSin, CosLog, ExpInt示例:rnd_luckynum Rnd_投针 Sqr_triangle_area,字符串函数,LenLTrim, RTrim, TrimUCase, LCaseLeft, Right, MidInStrAsc,
20、 Chr, String示例:str_encrypt, str_InStr_emailstr_num2chinese,日期函数,Date, Time, NowYear, Month, Day, WeekdayHour, Minute, SecondDateDiff, DateAdd,转换及判断,CInt, CLng, CDbl, CDate, CStrStr, Int, ValHex, OctFormatFormat( Now(), hh:mm:ss )Format( 3.14, #,#.000 )IsNumeric, IsDate,小结,I/O: MsgBox InputBox Beep数学
21、: Rnd Abs Int Sqr Sin Cos Log Exp字符串: Len LTrim RTrim Trim UCase Mid Left Right InStr Chr Asc日期: Date Time Now Year Month Day转换判断 CInt Val Format IsDate IsNumeric,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第7讲 数组及常用算法,本讲内容,数组遍试迭代递归,数组,数组的概念加上下标来决定是哪个变量定义数组 Dim 数组名(数组大小) As 类型使用数组数组名(下标)For EachNext,数组的大小,
22、下标 Dim a(100) 0-100 Dim a( 2 to 9 ) Option Base 0 或 1 二维数组 dim c(10,20)LBound() 最小下标UBound ()最大下标,动态定义数组大小,Dim A( ) as Integer n=计算出的一个数 ReDim A(n) As Integer ReDim Preserve age(i),几个细节,数组元素可以为不同类型Dim x(10) As Variant数组的其他定义词Dim, Public(在模块中), Private, Static数组作参数Sub MySub ( x( ) As Integer)Call MyS
23、ub( a() ),数组的应用,最大值与平均值排序,插入筛法求素数约瑟夫问题Fib数列,其他数列杨辉三角,Array等函数(*),Array()及IsArray()Dim ary As Variantary = Array(apple, banana, )Split()及Join()ary = Split(This is a book, )j = Join(ary, ),集合(*),CollectionAddRemoveCountItemFor EachNext,算法,指令的有限序列 特点:有穷性 确定性 可行性,遍试,逻辑上:针对所有可能的情况,形式上: For 中用 If示例:1.韩信点兵
24、,百鸡问题,鸡兔同笼问题 2.水仙花数 13+53+33=153 3. 完全数 28=1+2+4+7+14 4.百分币 5. 佩尔方程 5.验证猜想:哥德巴赫猜想,迭代,逻辑上:多次使用同一算法形式上:a = f( a )示例:1.求平方根 2. Mandelbrot集,Julia集 3. 倍边法求Pi 4. 数字平方和,递归,逻辑上:一个问题化为同样的问题形式上:自己调用自己示例:1.求阶乘 2.菲波那契数列 3. Celay树, Koch分形集,小结,数组: 定义与下标遍试: for中用if迭代: for中n=f(n)递归: f(n)中用f(n-1),Visual Basic程序设计,主讲
25、教师:唐大仕,北京大学远程教育课程,第8讲 常用控件,界面设计,界面设计的重要性界面元素控件窗体绘图菜单其他,有关控件的使用,怎样得到控件相关的属性、方法与事件:Ctrl_J 快速提示 F1 -MSDN(如果安装了MSDN)F2 -Object Browser可以参考其他一些资源光盘,如:书籍,如: ,控件的一般属性,Alignment 对齐方式 0 vbLeftJustify 1 vbRightJustify 2 vbCenterAppearance 0 1:3DAutoSize True FalseBackColor ForeColorRGB(r,g,b) vbRed vbGreen QB
26、Color(Rnd * 15)123235& &Hrrggbb&,控件的一般属性(续),BorderStyle CaptionFont xxx.Font.Bold = true xxx.Font.Italic = Truexxx.Font.Underline = True xxx.Font.Size = 24 xxx.Font.Name = 宋体 或 xxx.FontName = 宋体Left Top Width Height,控件的一般属性(续),MousePointerMouseIcon(当MousePointer为99时,设MouseIcon)Picture设计时:选择文件 或 粘贴图片
27、运行时:xxx.Picture = LoadPicture(“文件”),控件的一般属性(续),ToolTipTextUseUnemonic caption中用&,如 xxxx&XxxxxVisiable: True FalseEnabled: True FalseWordWrapMultiLine,CommandButton 按钮,Caption Style, Picture, ToolTipText Enabled,Label 标签,ToolTipText, AutoSize, WordWrap, Alignment0 vbLeftJustify 1 vbRightJustify 2 vbC
28、enter例: Label_mouse_shell_263 注:shell 程序名 参数 表示调用外部程序,TextBox 文本框,SetFocus方法, GotFocus, LostFocus事件 SelStart, SelLength, SelText, TextMultiLine, ScrollBarsPasswordChar *Locked,Enabled示例:text_sel_password_enter,Frame 框,Caption BorderStyle 框: 容器 线 成组Visible,CheckBox 及 OptionButton,CheckBox 复选框 Value(1
29、或0或2):vbCheckedOptionButton 单选框 Value(Ture或False) 放到一个Frame 经常做成控件数组 示例:Checkbox_option.frm,滚动条,HScrollBar, VScrollBar Max, Min, Value,Shape及Line,Shape形状 / Line 线 Shape / x1,y1,x2,y2 BorderStyle, BorderColor BorderWidth FillStyle, FillColor, BackStyle, BackColor,Timer 定时器,Timer Interval, Enabled示例:
30、Timer_Shape_Line_Clock.frm,ListBox 及 ComboList,ListBox 列表框 ComboList 组合框 可以认为 ComboList=List + Text Style MultiSelect List(i), ListCount, ListIndex, Selected(i), SelCount AddItem, RemoveItem, Clear 方法 Combo的Text 示例: Combox_list.frm,PictureBox 及 Image,PictureBox 可作容器,可以在上面画图 xxx.Picture = LoadPicture
31、(XXX.jpg)Image Picture 不能作容器, 但可以Stretch Image1.Picture = LoadPicture(XXX.bmp) 示例:跳舞的小女孩 dance_girl,小结,控件的一般属性CommandButton, Label, TextBoxFrame, CheckBox, OptionButtonHScrollBar, VScrollBarListBox, ComboBoxPictureBox, Image,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第9讲 绘图、窗体与菜单,本讲内容,绘图窗体多窗体菜单,绘图,在哪里绘图:窗
32、体上 如: Me.Circle (1000,1000),300PictureBox上 如: Picture1.Circle (1,1),1,单位及比例尺,比例尺 ScaleMode =vbTwips 1/1440 inch =vbPixels 像素 Scale (-50,50)-(50,-50) ScaleLeft ScaleTop ScaleWidth ScaleHeight,Scale (-50,50)-(50,-50),绘图状态,CurrentX=100,CurrentY=100ForeColor BackColor DrawWidth DrawStyleFillColor FillSt
33、yleDrawMode=vbCopyPen, =vbXorPenFontFontSize, FontName,FontBold, FontItalic,绘图方法,Line (x,y)-(x,y), color, BFCircle (x,y), r, colorCircle (x,y), r, color, start, end, aspectPSet (x,y), colorPrint .Cls示例:draw_simple.frm,绘图示例,函数图螺线画极坐标图旋转的椭圆 画金刚石,窗体,Form窗体与对话框添加窗体加入系统定义的窗体或对话框,特殊的事件,ResizePaint 示例: For
34、m_Resize_Paint.frm,特殊的属性,BackColor BorderStyle WindowStatus StartupPositionMousePointer 示例:简单屏保: form_screen_saver.frm生成屏保:File/Make EXE 文件名为:xxxx.scr 然后将xxxx.scr文件复制到c:windows目录下示例:屏保ScreenSaver (*),多窗体,加入窗体: Project/Add Form已有的窗体及对话框加入模块: Project/Add Module(模块中可以定义变量public,定义Sub,Function)设定程序入口:Pr
35、oject/Property/Startup Object,窗体的显示,当某个事件发生时(如点击某个菜单或图片)Form2.Show Me.HideLoad Form2Unload Form3frmAbout.Show vbModal, Me模态,程序生成多窗体(*),Dim f As New Form1f.Show示例: Form_As_New.frm,模块,用于定义变量、函数、过程Public xxxx As String Public Sub xxxxx( xxx )Public Function xxxx(xxx) As XXXXPublic Sub Main() 可作为程序入口调用模
36、块中的过程可以用模块名如: Call Module1.mysub,怎样在窗体之间交流信息,直接使用控件:Form2.Text1.Text = hello使用模块中的变量在模块中定义变量: Public age As Integer在窗体1中对它赋值: age = Text1.Text在窗体2中使用它: If age18 Then,Menu菜单,进入菜单编辑器:Tools/MenuEditor(或按 Ctrl+E)有关菜单项:菜单名(Name)菜单文字(Caption)其中用 & 表示下划线(如 &Open)用单独的减号(-)表示分隔线快捷键 ShorCutKey 如 Ctrl+O菜单的级别 (
37、按左右箭头按钮)Checked,Enabled,VisibleWindowList,菜单的编程,与按钮相似菜单上单击,对XXX_Click事件进行处理,上下文菜单(*),设计时: 使该菜单不可见 (Visiable为False)程序中,弹出:在MouseDown事件中,If Button=vbRightButton Then PopupMenu menu5示例Form_menu_simple.frm,小结,绘图:状态与方法窗体:事件与属性多窗体:加入与交互菜单:编辑与编程,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第10讲 复杂的界面,本讲内容,多控件外部控件控
38、件数组MDI菜单、通用对话框、工具栏、状态栏等,多控件的布局,多控件的选定与设置对齐与大小TabIndex(Tab顺序) 控件的成组示例:人员信息_control.frm,外部控件,ActiveX Control(外部控件) 是已经编好的程序,可用于VB中 一般存在于 .ocx .dll文件中加入外部控件的步骤: 1.工具箱上点右键,选Component.(组件) 从中进行选择,如: Microsoft Windows Common Control 2.从工具箱上,选控件,加入到窗体中,使用外部控件,1.属性: F4,属性窗 点右键,打开属性页 2. 方法/事件 3. 系统中必须有控件例: M
39、icrosoft Windows Common Contro的ProgressBar(参见书中示例),控件数组,控件数组: 同名的多个控件,称为控件数组 每个控件的 Index 不同产生方法(以下方法均可): 1.复制、粘贴 2.将多个控件的名字相同 3.设Index 4.程序中 Load XXX(i)则生成一个新的 复杂示例:计算器(不讲),处理控件数组的事件,在控件的事件中可以用 Index 示例:按钮数组.frm 示例:六个滚动条: line_color_grad_scroll.frm 示例:排块游戏.frm (练习使用控件数组、过程、函数) 有趣示例:雪花飘飘 snowflake,更复
40、杂的界面 (*),SDI:单文档界面MDI:多文档界面,使用MDI及菜单,加入一个MDIForm加入一个frmAbout将MDIForm设为启动对象(Project/Property/StartObject)在MDIForm中加入菜单(Ctrl+E)将Form1的MDIChild置为True(F4 属性窗中设)在Form1上加入菜单(Ctrl+E),使用ActiveX控件,工具箱加入ActiveX控件(工具箱上点右键,选Components)Microsoft Rich Text Box ControlMicrosoft Windows Common ControlMicrosoft Comm
41、on Dialog Control,使用RichText及通用对话框,在Form1上加入RichTextBox,命名为Rich1在Form1上加入CommonDialog,通用对话框,.showOpen .showSave .showFont .showColor .showPrint示例:CommDialog示例:参见WebBrowser,使用ClipBoard,GetTextSetText,使用工具条,在Form1上加入ToolBar在其中加多个按钮: Buttons/InsertButton在Form1上加入ImageList在其中加多个图片:ImageList/InsertPictur
42、e为工具条设图片: 在ToolBar1/ImageList中选ImageList1 然后设每一个Button的Image为工具条编程: 其中利用Button.Index,使用状态栏,在Form1上加入StatusBar加入多个Panel设定Panel的类型设定图片对StatusBar进行编程Statusbar1.Panel(3).Text = “”,小结,多控件的布局外部控件控件数组MDI菜单、通用对话框、工具栏、状态栏等,Visual Basic程序设计,主讲教师:唐大仕,北京大学远程教育课程,第11讲 文件、程序调试,本讲内容,文件的分类及操作文件及目录控件程序的调试从程序到软件,文件的概念,是信息的集合存储于一定的介质上按名存取 E:vb_classDrawForm1.frm teachersharesubfile1.txt,文件的种类,顺序文件(sequential file)文本文件,不定长记录文件随机文件(random access file)定长记录文件二进制文件(binary file)所有其他文件,文件的操作,文件的打开Open 文件名 For 方式 Access 存取类型 As#文件号FreeFile() 得到可用的文件号读写Line Input, GetPrint, Write, Put等EOF() 判断是否到文件尾关闭Close 文件号,