Download presentation
Presentation is loading. Please wait.
Published byCamilla Hansen Modified 6年之前
1
第7章 VB.NET程序设计基础 本章主要内容: 介绍VB.NET的集成开发环境; 常用控件(主要属性,方法和事件)的使用;
表达式、程序控制结构等)。(重点)
2
7.1 VB.NET基本概念 7.1.1 VB.NET简介 .NET开发平台:如图所示。
3
数据和XML类(ADO.NET,SQL,XML,XSLT etc.)
7.1.1 VB.NET简介 VS .NET开发平台 中间语言程序(EXE) 在不同的CPU上运行 基础类库 CLR 第1次编译 第2次编译 VS.NET VB.NET VC++.NET VC#.NET VJ#.NET Windows应用程序 ASP.NET程序 数据和XML类(ADO.NET,SQL,XML,XSLT etc.)
4
7.1.1 VB.NET简介 1. .NET开发平台的特点 ①支持多种语言编程环境。VS.NET是一个集成开发环境,集成VB、VC、C#、J#。 允许它们共享工具并有助于创建混合语言解决方案。 ②可以开发多种应用程序。如Windows应用程序、ASP Web 应用程序、XML Web services、移动(Mobile)应用程序等等 。
5
7.1.1 VS.NET简介 ③使用同一个基础类库。在传统的语言编程环境中,不同的语言有不同的函数库,而且调用方式也不同,不同语言的函数库是不能通用的。在VS.NET中,大家使用同一个基础类库。
6
7.1.1 VS.NET简介 ④公共语言运行时库。 运行时库提供了执行程序的服务,实现了编程语言的统一。
.NET程序需要2次编译才能在CPU上运行。首先编译生成与CPU无关的中间语言,然后在公共语言运行时库(CLR)的支持下,中间语言程序被编译成本地CPU指令程序。实现了.NET跨平台运行的目标。
7
7.1.1 VS.NET简介 2. VS.NET和.NET框架 .NET框架是与VS.NET紧密相联, VS.NET依赖于.NET框架提供的服务。 . VS.NET和.NET框架的关系如下图所示。
8
.NET框架 调用.NET框架服务 调用编译器的服务 运行时调试支持 工具窗口 代码编辑器 可视化设计器 集成开发环境 VS.NET
公共类型系统 公共语言规范 Just In Time编译器 执行管理 .NET框架类库 公共语言运行库 第3方语言 C++ C# VB.NET VJ# 编译器 .NET框架
9
7.1.1 VS.NET简介 3. VB.NET和VS.NET VB.NET是VS.NET支持的多种语言之一。是微软推出的第1个基于.NET框架的开发工具,是完全面向对象的编程语言,支持继承、重载、构造等面向对象方法。
10
7.1.2 VB.NET集成开发环境 进入VB.NET 主要窗口介绍 ①VB.NET主窗口 ②窗体设计器窗口 ③代码设计 ④属性窗口
③代码设计 ④属性窗口 ⑤解决方案资源管理器窗口 ⑥工具箱窗口 ⑦其它窗口(在“视图”菜单中选择) 一个应用程序由项目构成,一个项目对应一个项目文件夹,其中包括项目涉及的所有文件。
11
7.1.3 建立简单的应用程序 本节我们通过2个简单例子说明完整VB.NET应用程序的建立过程。 建立一个应用程序分以下几步进行:
① 建立用户界面的各个对象; ② 对象属性的可视化设置; ③ 对象事件过程编码; ④ 保存、调试和运行程序。
12
建立简单的应用程序 例7.1 界面见下页图所示。
13
7.1.3 建立简单的应用程序 例7.2 界面见下页。通过按钮操作让“欢迎使用VB.NET”在窗口中移动。步骤:
建立简单的应用程序 例7.2 界面见下页。通过按钮操作让“欢迎使用VB.NET”在窗口中移动。步骤: ①设计用户界面并设置控件属性 ②编写事件过程
14
建立简单的应用程序 Private Sub Timer1_Tick(ByVal sender …, ByVal e As …) … If Label1.Left > Me.Width Then Label1.Left = -200 Else Label1.Left = Label1.Left + 8 End If End Sub Private Sub Button2_Click( …) …. ‘手动移动 Timer1.Enabled = False Timer1_Tick(sender, e) ‘调用一次Timer1_Tick End Sub Private Sub Button1_Click( …) …. ‘ 自动移动 Timer1.Enabled = True End Sub
15
7.1.4 如何使用帮助系统 VS.NET中联机帮助系统是基于MSDN library。VS.NET的MSDN library可以随其安装时一起安装,也可以以后安装。 帮助有下面常用的四种方式。 1. 动态帮助 动态帮助跟踪用户的动作,并自动地显示一系列帮助主题。选择“帮助/动态帮助”菜单项,打开动态帮助窗口。
16
7.1.4 如何使用帮助系统 鼠标指向哪,帮助就到哪!
17
7.1.4 如何使用帮助系统 2. 索引 选择“帮助/索引”菜单项,打开索引帮助窗口。
18
7.1.4 如何使用帮助系统 3. 使用上下文相关帮助 按“F1”键使用上下文相关帮助。它可以根据当前选定的内容直接定位帮助内容。(电脑操作演示) 4. 网络资源 可通过
19
7.2 VB.NET可视界面设计 本节主要分以下几方面内容: 面向对象设计的基本概念。 介绍若干常用控件的使用。
20
7.2 .1 VB.NET对象概念 1. 对象和类 对象:是对客观世界中的事物的抽象。用事物的特征(属性)和行为(方法)来描述。
例如:一个人,一扇窗口,一个按钮等都是对象。 对象是面向对象编程的基本元素.
21
7.2 .1 VB.NET对象概念 类:是对一组相似对象的抽象描述,这些对象具有相同种类的属性和方法。
类与对象的关系:类是抽象的,对象是具体的。类是对象的抽象,对象是类的实例。类是创建对象实例的模板。 例如:“桥梁”是抽象的类,则具体的桥梁,如杨浦大桥、南京长江大桥等则是对象。
22
7.2 .1 VB.NET对象概念 在VB.NET中,工具箱中的各种图标就是系统设计好的标准控件类。
当我们把所要的控件从工具箱中拿到窗体中时,就是创建了这个控件类的一个对象。该对象继承了类的所有属性和方法,当然用户可根据需要修改属性的值。
23
7.2 .1 VB.NET对象概念 2. 对象的属性、事件和方法 VB.NET的控件对象具有自己的属性、方法和事件。
(1)属性: 标识了对象的特征。 例如:一个”按钮”对象,有属性: 字体(Font)、前景颜色(Forecolor)、背景颜色(Backcolor)、文本(Text)、是否可操作(Enabled)等等。
24
7.2 .1 VB.NET对象概念 (2)方法: 附属于对象的行为和动作。 例如:一个“窗体”(form)对象,方法有:
(2)方法: 附属于对象的行为和动作。 例如:一个“窗体”(form)对象,方法有: Add(往窗体中加入控件对象)、Close(窗口关闭)等等。 “方法”是指使对象行动的命令,它是通过调用来使用的。 对象方法的调用格式: 对象名.方法([参数]) 例如:Textbox1.Focus() ‘Textbox1获得焦点
25
7.2 .1 VB.NET对象概念 (3)事件 事件即发生的事情。是指对象可以识别和响应的操作。事件是触发执行的。
如:单击鼠标左键(Click),双击鼠标左键(DoubleClick)等. 事件可以由用户操作触发,也可以由系统自动触发(例如,出错).当事件发生之后,需要触发一些操作,这就需要用户编写相应的代码对此进行响应。这些代码就构成了“事件过程”。
26
VB.NET对象概念 VB.NET是采用事件驱动程序设计方法。程序执行后系统等待某个事件的发生,然后去执行处理此事件的事件过程,待事件过程执行完后,系统又处于等待某事件发生状态,这就是事件驱动程序设计方法。 对象、事件和事件过程之间的关系如下图。 对象 事件过程 触发 执行 事件
27
7.2 .1 VB.NET对象概念 3.对象的通用属性 主要属性:
(1) name(对象名称):每个对象都有一个唯一标识—名字。对象创建时,系统自动给它默认名,如form1、textbox1等,但用户可修改。 (2) text(对象显示文本):form, textbox, button, label等大多数控件都有此属性.
28
7.2.1 VB.NET对象概念 (3) Location(控件对象的位置):
控件左上角相对容器的位置,由一对整数表示,单位为像素。 (可以用left和top表示) 例如:button1.location=new point(88,48) 注:New表示创建一个新的point类的对象。 等价于: button1.left=88, button1.top=48 88 48
29
7.2.2 窗体和常用控件 (4) size(控件对象的大小): 也由一对整数表示,单位为像素。 (可以用width和height表示)
例如:button1.Size=new Size(80,32) 等价于: button1.width=80 button1.height=32 80 32 Point, size, color都是结构
30
7.2.2 窗体和常用控件 (5) font(字体):设置对象显示文字的字体。 Label1.Font=New Font(“隶书”, 14)
(6) ForeColor、BackColor(前景颜色和背景颜色):设置对象显示文字的颜色和背景颜色 Label1. ForeColor=Color.Blue (7) Cursor(光标):给出鼠标位于对象上时显示的光标。 Button1.Cursor=new Cursor(“光标文件名”)
31
7.2.2 窗体和常用控件 (8) Enabled:设置对象是否可操作true或false。
(9) Visible:设置对象是否可见true或false。 (10) TabIndex:决定程序运行时,按Tab键,焦点在控件移动的顺序。
32
7.2.2 窗体 窗体对象就是Form对象。 主要属性: ControlBox(窗体控制框true或false)、
BackgroundImage(背景图片) WindowsState:设置程序运行时, 窗体是正 常(Normal)、最大化、最小化 MaximizeBox(最大化按钮要否?默认true) MinimizeBox (最小化按钮要否?默认true)
33
7.2.2 窗体和常用控件 2. 常用事件: Load事件:当窗体被装入工作区时触发。一般该事件代码中,对变量或对象的属性设初值。
Click(单击鼠标事件)、 DblClick(双击鼠标事件)、 Activated(窗口被激活时触发)
34
7.2.2 窗体和常用控件 例7.2:见P172。 双击窗体 单击窗体
35
7.2.2 窗体和常用控件 Private Sub Form1_Load(…) … Me.FormBorderStyle =
FormBorderStyle.Fixed3D Me.Text = "例7.3" Me.MaximizeBox = False Me.MinimizeBox = False Me.BackgroundImage = nothing '去掉背景图片 End Sub
36
7.2.2 窗体和常用控件 Private Sub form1_Click(…) … Me.Text = "单击窗体"
Me.BackgroundImage = _ Image.FromFile(“tongji2.jpg") Me.WindowState = _ FormWindowState.Maximized End Sub
37
7.2.2 窗体和常用控件 Private Sub form1_DoubleClick(…) … Me.Text = “双击窗体”
Me.WindowState = _ FormWindowState.Normal Me.Size = New Size(264, 256) Me.BackgroundImage = _Image.FromFile(“tongji1.gif") End Sub
38
7.2.2 窗体和常用控件 3. 常用方法 Show(显示)、 Hide(隐藏)、
ShowDialog (以对话框模式显示窗体,即控制用户只能对该窗体操作,对窗体之外的东西无法操作,直到用户关闭该窗体)。
39
7.2.2 窗体和常用控件 4. 多重窗体 对于较复杂应用程序,往往需要多个窗体来实现。在多重窗体中,每个窗体可以有自己的界面和程序代码,完成各自的功能。 VB.NET创建的窗体是类,必须通过New实例化为对象。
40
7.2.2 窗体和常用控件 添加窗体 选择“项目/添加Windows窗体”命令.在对话框中选择“Windows窗体”即可. 启动窗体的设置
系统默认form1为程序运行时的启动窗体,可以修改设置,将其他窗体(如form2)设置为启动窗体。
41
7.2.2 窗体和常用控件 (2) 窗体实例化和显示 在多重窗体程序中,只有启动窗体(假定为Form1)的实例化是vb.net自动完成的.
dim f2 as new form2 ‘定义f2为类form2的对象 f2.show( ) 或 f2.showDialog()
42
7.2.2 窗体和常用控件 (3). 不同窗体间数据的访问 a. 窗体实例化后,窗体数据的互访 ①窗体form1访问窗体form2上的数据.
两个窗体之间数据的访问有下列2种形式. a. 窗体实例化后,窗体数据的互访 ①窗体form1访问窗体form2上的数据. Form1中代码形式如下: Dim frm2 as new from2 Frm2.showdialog() ‘显示窗体frm2 me.textbox1.text=frm2.textbox1.text 注意写法: 不能写为form2
43
7.2.2 窗体和常用控件 ② 窗体form2访问窗体form1上的数据. Form2中某事件代码形式如下:
Dim frm1 as new from1 me.textbox1.text=frm1.textbox1.text Frm1.show() ‘显示窗体frm1 Form2中, text1box1.text=form1.textbox.text 错误
44
7.2.2 窗体和常用控件 b. 通过在模块中定义公共变量实现相互访问.
如:建立一个模块Module1。在其中定义公共变量: Public x as Imteger 例7.3(P175):多重窗体应用示例。
45
7.2.3 常用控件 1. label(标签控件) 标签控件用于显示文本信息,不能输入文本信息(输入用文本框)。 (1) 主要属性
Name、text、 location、 forecolor、size 、backcolor 、 visible 、Font(字体)、 BorderStyle(边框风格) 、
46
7.2.3 常用控件 Contextmenu(快捷菜单), TextAlign(文字在标签中的对齐方式)、 image(背景图片)、
AutoSize(自动大小) (2) 主要事件 Click、DoubleClick、Change(改变)
47
7.2.3 常用控件 2. TextBox(文本框) 文本框是一个文本编辑框,用户可以在该框中输入、编辑、修改和显示文本内容。
(1) 主要属性 Name、location、forecolor、size 、backcolor 、visible 、 Font(字体) 、BorderStyle(边框风格) 其他属性见下页
48
7.2.3 常用控件 属性 类型 意义 Text 字符串 框中编辑内容 MaxLength 整型 允许输入最多字符数 MultiLine
逻辑 允许多行输入否,false ScrollBars 枚举 选择滚动条,MultiLine为true时 PassWordChar 字符 文本框用于输入口令时,显示的字符 ReadOnly 逻辑 只读,False SelectionStart 整型 选定的正文开始的位置,第1个字符位置为0 SelectionLength 整型 选定的正文长度 SelectedText 字符串 选定的正文内容
49
7.2.3 常用控件 (2) 主要事件 (3) 主要方法 Focus: 将光标移到文本框上. 例如:
TextChanged:文本框中内容改变时触发. KeyPress/KeyDown:当焦点在文本框上时,用户按了键时触发。 LostFocus:当文本框失去焦点时触发. Gotfocus: 当文本框得到焦点时触发. (3) 主要方法 Focus: 将光标移到文本框上. 例如: TextBox1.Focus()
50
7.2.2 窗体和常用控件 例如: Sub textbox1_keypress(…,ByVal e …)…
If asc(e.keychar)=13 then … endif End Sub 或 If e.keychar=chr(13) then ….
51
7.2.3 常用控件 3. Button(命令按钮) (1) 主要属性 Name、text、 location、
forecolor、size 、backcolor 、 visible 、Font(字体)、Enabled、 BorderStyle(边框风格)、 TextAlign image(图片, 建图形按钮时用)、
52
7.2.2 窗体和常用控件 例7.4 按钮应用。界面、功能如下图所示。 演示 收集3个图片,存放在项目的bin文件夹下。
TextBox1.Font = New Font("隶书", 16, FontStyle.Italic)
53
7.2.2 窗体和常用控件 4. 单选按钮、复选框和分组框 单选按钮(RadioButton) 与复选框(ChekBox)的区别:
单选按钮任何时候最多只能选择一项, 一般利用Panel(面板)或GroupBox(分组框)将相同性质按钮归类在一组;复选框列出多项,用户可从中选择一项或多项。见下页图所示。
54
7.2.2 窗体和常用控件 单选按钮 复选框
55
7.2.3 常用控件 (1) 主要属性 Name、Font(字体)、forecolor、 visible 、Enabled、 text、
Checked: 逻辑值,表示单选按钮或复选框选中否。 (2) 主要事件 Click、 CheckedChanged(对象值改变时触发)
56
7.2.3 常用控件 Panel(面板)与GroupBox(分组框) 都是用于将相同性质的对象归类。当我们移动分组框或面板时,其中的对象也会跟着移动。 分组框的主要属性: text, BackgroundImage , font 面板的主要属性: BorderStyle , BackColor, BackgroundImage
57
7.2.3 常用控件 5. 列表框和组合框 列表框(ListBox):在框中提供若干选项供用户选择。只允许用户选择,不能输入。
组合框(ComboBox):由文本框和下拉列表框组合而成。用户即可以在文本框中输入又可在下拉列表中选择。 列表框 组合框
58
7.2.3 常用控件 (1) 主要属性 Items: 集合。存储列表框或组合框中的所有选项。
常用控件 (1) 主要属性 Items: 集合。存储列表框或组合框中的所有选项。 SelectedIndex: 整型。程序运行时被选定的项的序号。第1项的序号为0。 SelectedItem:字符。被选定的项的内容。 Text:用户输入或选择的值。 Items.Count: 整型。程序中引用,值为列表框或组合框中的项数。 Sorted:逻辑。列表框或组合框的选项是否按字母表顺序排序.
59
7.2.3 常用控件 组合框专有属性: DropDownStyle: 设置组合框外观和功能。
当ComboBox1.DropDownStyle= ComboBoxStyle. DropDownList时 组合框只能通过选择得到文本。 当ComboBox1.DropDownStyle= ComboBoxStyle. DropDown时 组合框即可通过输入又可选择得到文本。
60
7.2.3 常用控件 当ComboBox1.DropDownStyle= ComboBoxStyle. Simple时
组合框即可输入也可选择得到文本。但外观有改变。下拉列表将不折起。如下图所示。 Simple
61
7.2.3 常用控件 (2) 常用方法 Items.Add: 把一个选项加入到列表框或组合框。 Listbox1.items.Add(“computer”) Items.Remove : 从列表框或组合框中删除指定的选项。Listbox1.items.remove(“computer”) Items.RemoveAt(Index):删除列表框或组合框中指定位置上的选项。 Listbox1.items.removeAt(1) Items.Clear:清除列表框或组合框中的所有选项。
62
7.2.3 常用控件 (3) 常用事件 Click、DoubleClick、
SelectedIndexChanged(SelectedIndex属性值改变后触发) 例7.5 列表框控件程序。界面如图。
63
7.2.3 常用控件 6. 滚动条和进度条 滚动条(ScrollBar):通常附在窗体上协助观察数据或确定位置,也可用来作为数据的输入工具。
滚动条有垂直滚动条(VScrollBar)和水平滚动条(HScrollBar) 2种。 进度条(ProgressBar):通常指示事务处理的进度。
64
7.2.3 常用控件 (1) 主要属性 Value:滑块当前位置所代表的值,缺省值为0。
Minimun、Maximun :滚动条可以调整的最小值和最大值。 SmallChange:滚动条两端的箭头为微调箭头,用户单击微调箭头时,Value属性增加或减少的值。(相当于步长) LargeChange:按下中间快卷区域时的移动量。
65
7.2.2 窗体和常用控件 (2) 主要事件 Scroll、ValueChange:当滚动条内滑块位置发生变化时,ValueChange的值随之改变时,触发这两个事件。 例—滚动条程序。三个滚动条分别控制 PictureBox1的背景颜色(red、green、 Blue)。 Minimun=0, maximun=255, largechange=10, SmallChange= 见下图。
66
7.2.3 常用控件 Private Sub HScrollBar1_Scroll(…)… PictureBox1.BackColor =
Color.FromArgb(HScrollBar1.Value, HScrollBar2.Value, HScrollBar3.Value) End Sub
67
7.2.3 常用控件 7. 定时器 Timer (1) 主要属性 Enabled: 为false 时,定时器不起作用。
Interval: 两次触发tick事件的时间间隔。其值以ms(0.001s)为单位。即1000为1秒。 (2) 主要事件 Tick: 时间间隔一到触发该事件。
68
7.2.2 窗体和常用控件 例7.6 :用定时器控制蝴蝶在窗体内飞舞。
窗体中放三个PictureBox控件。设计时,只有PictureBox1的visible=true。通过定时器控制在PictureBox1中装入PictureBox2 和PictureBox3的图像来实现。
69
7.2.2 窗体和常用控件 事先收集2个不同蝴蝶图片,存放在项目的bin文件夹下。
70
7.2.3 常用控件 8、日期挑选控件 DateTimePicker控件: 用户不想输入日期(或时间),可以通过该控件选择一个日期(时间)。
71
7.2.3 常用控件 (1) 主要属性: Value: 对象的当前值。 Format:显示日期的格式。
Long(2008年2月25日) \ short(2008/2/25) \ time(仅显示时间) \ custom(用户所给格式) ShowUpDown:控制显示的样式 Flase/true Flase True
72
7.2.3 常用控件 例7.7 程序界面如图所示。 Private Sub DateTimePicker1_ValueChanged (…)
例7.7 程序界面如图所示。 Private Sub DateTimePicker1_ValueChanged (…) MessageBox.Show( DateTimePicker1.Value.date.ToString) End Sub
73
7.2.3 常用控件 9. RichTextBox控件 RichTextBox控件用于显示、输入和操作格式化的文本。控件除了做 TextBox 控件所做的每件事外,还可以显示字体、颜色和链接,从文件加载文本和加载嵌入的图像,以及查找指定的字符(find方法)。RichTextBox 控件通常用于提供类似字处理应用程序(如 Microsoft Word)的文本操作和显示功能。
74
7.2.3 常用控件 RichTextBox没有PasswordChar属性,但比TextBox功能强大,主要有:
(1) 文本的长度没有64k限制; (2) 可对选中的文本设置格式,如 SelectionBackColor、SelectionColor、SelectionFont等 (3) 可方便用LoadFile和SaveFile直接读写文件。
75
7.2.3 常用控件 RichTextBox常用的2个方法: SaveFile: 将RichTextBox 控件中内容保存到文件中
LoadFile:将文件内容加载到 RichTextBox 控件中 用法:RichTextBox1. LoadFile(路径文件名,流类型) RichTextBox1. SaveFile(路径文件名,流类型) 功能:将 RTF 格式文件或标准 ASCII 文本文件加载到RichTextBox 控件中(或 反之)。
76
7.2.3 常用控件 If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
RichTextBox1.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText ) End If If SaveFileDialog1.ShowDialog() = DialogResult.OK Then RichTextBox1.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If 路径和文件名
77
7.2.4 菜单和对话框 1. 菜单设计 有2种形式的菜单:MainMenu(主菜单)和ContextMenu(弹出式菜单,或称快捷菜单)。 (1) 菜单建立: 选择工具箱中的“MainMenu”控件,并在窗口中拖曳出合适的大小; 此时MainMenu对象出现在窗体外的区域 直接在“请在此处输入”的虚框中输入所要的菜单数据。 见下图。
78
7.2.4 菜单和对话框
79
7.2.4 菜单和对话框 (2) 主要属性 (3) 菜单项事件: 主要是Click事件 Name: 菜单或菜单项名。
Text:菜单显示的文本。字母前有&表示该字母是热键,“-”显示菜单项分割线。 ShortCut:快捷键。 Checked:文本前有“√”,表示被选中。 (3) 菜单项事件: 主要是Click事件
80
7.2.4 菜单和对话框 (4) 弹出菜单 设计方法类似Mainmenu。
为某个对象的ContextMenu属性指定快捷菜单ContextMenu 1。当鼠标移到对象上,按鼠标右键打开此菜单。
81
7.2.4 菜单和对话框 2. 输入和显示对话框 输入和输出对话框不是控件,是由系统提供的函数实现。 (1) InputBox输入函数:
InputBox(提示[,标题][,默认值][,Xpos][,Ypos] ) 函数返回用户输入的值,函数值类型是字符串。
82
7.2.4 菜单和对话框 提示 默认值 标题 X,Y坐标 取消,则返回长度为0的字符串 InputBox对话框
83
7.2.4 菜单和对话框 例如: Dim an as string, gz as Decimal =0
an=InputBox(“请输入工资:”,“计算工资”,0) If an.trim.length<>0 Then Gz=CDec(an) Textbox1.text=gz End If 注: InputBox函数值是字符串型,上例中系统会将字符串型强制转换为Decimal.
84
7.2.4 菜单和对话框 (2) MsgBox输出函数 功能:打开一个信息窗口,等待用户选择一个按钮。函数返回值是一个整数,不同整数代表用户按了不同按钮。 若不需要返回值,可作为一个独立的语句使用。 格式: MsgBox(“提示”,按钮,“标题”) Messagebox.Show(“提示”, “标题”, 按钮)
85
7.2.4 菜单和对话框 例: MsgBox(“真的要删除吗?”, MsgBoxStyle.YesNo
+ MsgBoxStyle.Question , “信息提示”) 或 MsgBox(“真的要删除吗?”, 4+32 , “信息提示”)
86
7.2.4 菜单和对话框 按钮设置值及其意义 分组 枚举值 按钮值 对话框中心是的按钮 按钮 个数 OkOnly “确定” OkCancel
“确定” OkCancel 1 “确定”、“取消” AbortRetryIgnore 2 “终止”、“重试”、“忽略” YesNoCancel 3 “是”、“否”、“取消” YesNo 4 “是”、“否” RetryCancel 5 “重试”、 “取消” 图标 类型 Critical 16 关键信息图标 Question 32 问号图标 Exclamation 48 警告图标 Information 64 信息图标
87
7.2.4 菜单和对话框 函数返回与所选按钮的关系 枚举值 内部常数 返回值 被单击的按钮按钮 Ok vbOk 1 “确定” Cancel
vbCancel 2 “取消” Abort vbAbort 3 “终止” Retry vbRetry 4 “重试” Ignore vbIgnore 5 “忽略” Yes vbYes 6 “是” No vbNo 7 “否”
88
7.2.4 菜单和对话框 例7.8 编写一个账号和密码输入检查程序。P186
MsgBox("密码错误", MsgBoxStyle.RetryCancel + MsgBoxStyle.Exclamation, "警告")
89
7.2.4 菜单和对话框 3. 通用对话框 通用对话框控件包括: 打开文件对话框(OpenFileDialog)
保存文件对话框(SaveFileDialog) 选择颜色对话框(ColorDialog) 字体设置对话框(FontDialog) 打印设置对话框(PrintDialog) 这些对话框,程序设计时,显示在窗体下面,运行时,不会显示在窗体上,当需要弹出对话框时,就用ShowDialog方法。
90
7.2.4 菜单和对话框 假设窗体加入控件OpenFileDialog1,在程序中执行下面语句就会弹出“打开文件”对话框。
OpenFileDialog1. ShowDialog 例—颜色对话框。界面如图所示。 Private Sub Button1_Click(。。。) 。。。 ColorDialog1.ShowDialog() Label1.ForeColor = ColorDialog1.Color End Sub
91
7.2.4 菜单和对话框
92
7.2.4 菜单和对话框 例 字体对话框 。 FontDialog1.ShowDialog( )
Label1.Font = FontDialog1.Font 例 打开保存对话框。 OpenFileDialog1.ShowDialog( ) SaveFileDialog1.ShowDialog( ) OpenFileDialog1.Filter=“Text Files(*.Txt)|*.txt | Documents(*.doc)|*.doc|Pictures(*.bmp)|*.bmp | Jepg文件(*.jpg)|Jpg|All Files(*.*)|*.*”
93
7.2.4 菜单和对话框 例 字体对话框 。 FontDialog1.ShowDialog( )
Label1.Font = FontDialog1.Font 例 打开保存对话框。 OpenFileDialog1.ShowDialog( ) SaveFileDialog1.ShowDialog( ) OpenFileDialog1.Filter=“Text Files(*.Txt)|*.txt | Documents(*.doc)|*.doc|Pictures(*.bmp)|*.bmp | Jepg文件(*.jpg)|Jpg|All Files(*.*)|*.*”
94
7.2.4 菜单和对话框 例 字体对话框 。 FontDialog1.ShowDialog( )
Label1.Font = FontDialog1.Font 例 打开保存对话框。 OpenFileDialog1.ShowDialog( ) SaveFileDialog1.ShowDialog( ) OpenFileDialog1.Filter=“Text Files(*.Txt)|*.txt | Documents(*.doc)|*.doc|Pictures(*.bmp)|*.bmp | Jepg文件(*.jpg)|Jpg|All Files(*.*)|*.*”
95
7.2.4 菜单和对话框 例7.10 : P177
96
7.3 VB.NET基本语言 本节主要内容: VB.NET数据类型和表达式 程序控制结构 综合应用举例
97
VB.NET数据类型和表达式 数据类型 VB.NET提供了系统定义的基本数据类型,用户可根据需要自己定义数据类型。 表7.3.1给出了各种基本数据类型情况。
98
7.3.1. VB.NET数据类型和表达式 表7.3.1 VB.NET的标准数据类型 数据类型 占字节数 范 围 Byte 1 Char C
类型符 值类型字母 占字节数 范 围 Byte 1 0~255 Char C 2 0~65535(无符号) Boolean 3 True或Flase Short S -32768~32767 Integer % I 4 -231~231-1 Single ! F -3.4×1038~3.4×1038 Long & L 8 -263~263-1 Double # R -1.7×10308~1.7×10308 Decimal @ D 16 ~296-1 精度 达 28位
99
7.3.1. VB.NET数据类型和表达式 表7.3.1 VB.NET的标准数据类型(续 ) 数据类型 类型标识 占字节数 范 围 Date
范 围 Date 8 0001年1月1日 ~ 9999年12月31日 String $ 占10字节+2*字符串长度 Object 4 任意类型数据都可以存储在object类型的变量中
100
2.变量: 由字母、数字、下划线构成的标识符。字母不区分大小写,首字符只能是字母或下划线。
VB.NET数据类型和表达式 2.变量: 由字母、数字、下划线构成的标识符。字母不区分大小写,首字符只能是字母或下划线。 变量的声明 形式: Dim 变量名1 [ As 类型 [ =初值 ] ] Dim 变量名1[, …, 变量名n ] As 类型 说明:[As 类型] 缺省,默认变量为Object类型。
101
例: Dim x As Char=“网” Dim myday As date = _ 7.3.1. VB.NET数据类型和表达式
#1982/11/01# Dim s1, s2 As String , x As Integer Dim i!=12 ‘用类型符来说明类型
102
7.3.1. VB.NET数据类型和表达式 变量的默认初值: 变量类型 默认初值 数值类型 String “” Boolean False
String “” Boolean False Object Nothing Date 01/01/01
103
VB.NET数据类型和表达式 (4) 变量的作用域 分为:块级变量、过程级变量、模块级变量、全局(公共)变量。 块级变量:在控制结构块中声名的变量。如,IF/ENDIF、DO /LOOP 、FOR/NEXT中。 过程级变量:在一个过程中用Dim或Static声明的变量。只能在本过程中使用。过程结束,变量释放。
104
VB.NET数据类型和表达式 模块级变量:窗体(Form)、类(Class)、模块(Module)统称为模块。模块级变量指在模块内,任何过程外用Dim、Private声明的变量。可被本模块中任何过程访问。 全局(公共)变量:在一个模块(Module)中用Public声明的变量。可被应用程序中的任何过程或函数中使用。其值在整个应用程序结束时才会消失。
105
用Static语句声明的变量称为静态变量。每次调用过程时,静态变量保持原来的值。 形式:Static 变量名 [ As 类型 ] 例如:
VB.NET数据类型和表达式 (5). 静态变量 用Static语句声明的变量称为静态变量。每次调用过程时,静态变量保持原来的值。 形式:Static 变量名 [ As 类型 ] 例如: sub sum(ByVal n as integer ) Static j As integer=0 j+=n: sum=j End sub for n=1 to 100 Sum(n) next
106
VB.NET数据类型和表达式 3. 常量( P192 ) VB.NET有三种常量: 直接常量、用户声明的符号常量、系统提供的常量。 (1)直接常量 常数值直接反映了其类型; 也可在常数值后紧跟类型符显式地说明常数的数据类型。
107
VB.NET数据类型和表达式 例如: 123(整型)、 123S(短整型)、 12345&(长整型)、 1.23E2(单精度浮点型)、 12.45(双精度浮点型,小数形式)
108
形式:Const 符号常量名 [As 类型]=表达式
VB.NET数据类型和表达式 (2) 用户定义符号常量 形式:Const 符号常量名 [As 类型]=表达式 例如: Const Pi= ‘ Pi为单精度型符号常量 Const str1 = “VB.NET应用程序” Const str1 As String = “VB.NET应用程序” [As 类型]省写,系统会根据表达式类型决定常量类型。
109
7.3.1. VB.NET数据类型和表达式 (3) 系统提供的常量
VB.NET提供许多内部常量。一般以小写“vb”字母开头,后面跟有意义的符号. 常量 等效 表示 VbCrlf Chr(13)+Chr(10) 回车换行组合符 VbTab Chr(9) Tab字符 VbBack Chr(8) 退格符
110
VB.NET有2个根名称空间。System(基础类库)和Microsoft ( .Visual Basic(运行时库))。
4. 名称空间和常用函数 P192 (1) 名称空间和类 为了方便用户开发应用程序,使用系统提供的资源,微软通过名称空间把类划分为不同的组,将功能相近的类划到同一名称空间。有了名称空间,可以方便组织应用程序使用的各个类。如下页图所示。 VB.NET有2个根名称空间。System(基础类库)和Microsoft ( .Visual Basic(运行时库))。
111
7.3.1. VB.NET数据类型和表达式 System名称空间 Data子名称空间 SqlClient子名称空间 一个名称空间 下可以有:
ReadOnlyException类 statementType类型 SqlClient子名称空间 … Drawing子名称空间 Math类 一个名称空间 下可以有: 子名称空间、类、数据类型、结构、模块、枚举 等等
112
VB.NET数据类型和表达式
113
用户可以在“引用”上单击鼠标右键打开快捷菜单,添加“引用”项。
VB.NET数据类型和表达式 引用名称空间有三种方法: ① 项目引用 当新建一个项目时,VB.NET根据所建项目的类型,自动导入部分名称空间的引用。如下图所示。 用户可以在“引用”上单击鼠标右键打开快捷菜单,添加“引用”项。
114
VB.NET数据类型和表达式 ②直接引用 如要使用函数“Sqrt”,要使用system名称空间中的“Math”类。代码为: Label1.Text = System.Math.Sqrt(100) 即: 名称空间.[子名称空间.]类名.成员名
115
7.3.1. VB.NET数据类型和表达式 ③Imports语句( 引用语句 ) Imports语句的格式:
如下页图所示。
116
VB.NET数据类型和表达式 LOOK!
117
数学函数、数据类型转换函数、字符串函数。
VB.NET数据类型和表达式 (2) 常用函数 见P194 数学函数、数据类型转换函数、字符串函数。 Instr(开始位置, 字符串1,字符串2) 从“字符串1”中指定位置开始找“字符串2”,找到返回所在位置(数字),未找到返回0。首位置从1计。 Instr(字符串1,字符串2)表示从第1位置开始找。 Ctype(表达式,类型名) 将表达式的数据类型转换为指定数据类型、对象、结构、类或接口。
118
VB.NET数据类型和表达式 5. 运算符 VB.NET运算符有20多种,与大多数语言中的运算符相似,它们用来描述算术、字符、关系和逻辑运算。
119
7.3.1. VB.NET数据类型和表达式 表7.3.5 VB运算符 优先级 分类 运算符 含义 1 算术运算 ^ 幂 2 *, / 乘、除
*, / 乘、除 3 \ 整除 4 Mod 取余数 5 +, - 加、减 6 字符串运算 &、+ 字符串连接 7 关系运算 =、<>、<、<=、>、>= 比较运算 Is、Like 引用、模糊比较
120
7.3.1. VB.NET数据类型和表达式 表7.3.5 VB运算符(续) 优先级 分类 运算符 含义 8 逻辑运算 NOT 逻辑非 9
And 逻辑与 10 Or 逻辑或
121
VB.NET数据类型和表达式 字符串连接运算 “+”运算符:将两个字符串连接成一个字符串。 如:dim str1 as string=“应收帐款” dim str2 as string=“500” Label1.text=str1+str2 结果:应收帐款500
122
VB.NET数据类型和表达式 “&”运算符:除可以连接两个字符串外,还可以将不同类型的对象相互连接起来。 如:dim str1 as string=“应收帐款” dim num as integer=500 Label1.text=str1 & num 结果:应收帐款500 注意:&的两边要加空格
123
7.3.2 程序控制结构 程序控制结构有三种: 顺序、选择、循环结构,它们是程序设计的基础。
124
7.3.2 程序控制结构 1. 顺序结构 (1) 赋值语句 简单赋值语句形式: 变量名=表达式 复合赋值语句的形式:
顺序结构的语句主要有:赋值语句、输入/输出语句等。 (1) 赋值语句 简单赋值语句形式: 变量名=表达式 复合赋值语句的形式: 变量名 复合赋值运算符 表达式 复合赋值运算符的含义及应用见下表。
125
7.3.2 程序控制结构 设X初值为20 运算符 含义 例子 相当于 = 赋值 X=1 += 相加后再赋值 X+=1 x=x+1 -=
相减后再赋值 X-=1 X=x-1 *= 相乘后再赋值 X*=2 X=x*2 /= 相除后再赋值 X/=2 x=x/2 \= 相除后取整后再赋值 X\=3 X=x\3 ^= 求幂后再赋值 X^=3 X=x^3 &= 合并后再赋值 S1=“VB” S1&=“.NET” S1=s1 & ”.NET"
126
程序控制结构 2. 选择结构 (1) If条件选择语句 If条件选择语句有多种形式:单分支、双分支和多分支。
127
程序控制结构 ①If…Then语句(单分子结构) 形式: If 表达式 Then 语句 If 表达式 Then 语句块 End If 表达式:一般为关系表达式、逻辑表达式,也可为算术表达式,表达式值按非零 为True,零为False进行判断。
128
程序控制结构 语句块:可以是一个语句或多个语句。若用一行简单形式表示,则只能是一个语句;或一行写若干语句,但用冒号分隔。 例如: Dim x As Integer X=Inputbox(“请输入一个数值:”) If x>100 Then Label1.text=“值大于100”
129
程序控制结构 ② If … Then …Else语句(双分支结构) 形式: If 表达式 Then 语句 Else 语句 If 表达式 Then 语句块1 Else 语句块2 End If
130
程序控制结构 ③ If … Then …ElseIf 语句(多分支结构) If 表达式1 Then 语句块1 ElseIf 表达式2 Then 语句块2 … ElseIf 表达式n Then 语句块n Else 语句块n+1 End If
131
程序控制结构 表达式2 表达式n 语句块1 语句块2 语句块n 语句块n+1 … 表达式1 F T
132
7.3.2 程序控制结构 例: Dim x As Integer X=InputBox(“请输入一个成绩:”)
程序控制结构 例: Dim x As Integer X=InputBox(“请输入一个成绩:”) If x<60 Then MsgBox(“你的成绩不及格!”) Label1.foreColor=Color.red ElseIf x<70 Then MsgBox(“恭喜你,不容易,及格了!”) Label1.foreColor=Color.Yellow ElseIf x<80 Then MsgBox(“还不错哦!加把劲, 更上一层楼!”)
133
7.3.2 程序控制结构 Label1.foreColor=Color.Green ElseIf x<90 Then
程序控制结构 Label1.foreColor=Color.Green ElseIf x<90 Then MsgBox(“好孩子!”) Label1.foreColor=Color.Blue Else MsgBox(“Wonderfull !!! ”) End If Label1.text=X
134
程序控制结构 (2). Select Case语句 Select Case 变量或表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 … Case Else 语句块n+1 End Select Select Case语句(又称情况语句)是多分支结构的另一种表示形式。
135
程序控制结构 表达式列表2 语句块1 语句块2 语句块n 语句块n+1 … 表达式列表1 T F 表达式列表n
136
程序控制结构 说明: 变量或表达式:可以是数值或字符串变量或表达式。 表达式列表i: 与“变量或表达式”的值进行对比,因此类型必须相同。
137
Case “a”, “A” : 对比值是否为字符A或a。 Case 5, 10, 15 : 对比值是否为5或10或15。
程序控制结构 “表达式列表” 可以是下列对比值: Case 50 : 对比值是否为50。 Case “A” : 对比值是否为字符A。 Case “a”, “A” : 对比值是否为字符A或a。 Case 5, 10, 15 : 对比值是否为5或10或15。 Case 100 To 300 : 对比值是否为100~300之间的数值。 Case Is >=500 : 对比值是否大于或等于500。 注:不能写成 Case >=500
138
程序控制结构 例如: Dim ans String Ans=InputBox(“请输入班级代号:”) Select case Ans Case “a” , ”A” Label1.text=“计算机班” Case “b” , ”B” Label1.text=“电子班”
139
程序控制结构 Case “c” , ”C” Label1.text=“网络规划班” Case Else Label1.text=“输入错误” End Select
140
程序控制结构 3. 循环结构 循环语句有两种形式: Do …Loop(条件型)循环 For…Next(计数型)循环。
141
程序控制结构 (1) For循环语句 用于控制循环次数预知的循环。 语句形式如下: For 循环变量=初值 To 终值 [Step 步长] 语句块 [Exit For] Next [循环变量]
142
程序控制结构 例如:计算2+4+… 的总和。 Dim sum, j As Integer Sum=0 For j=2 To 100 Step 2 Sum + = j Next Label1.text=sum
143
7.3.2 程序控制结构 (1) Do…Loop 循环语句 用于控制循环次数未知的循环。 语句形式如下: 形式1:
程序控制结构 (1) Do…Loop 循环语句 用于控制循环次数未知的循环。 语句形式如下: 形式1: Do[ While | Until 条件] 语句块 [Exit Do] Loop 形式2: Do 语句块 [Exit Do] Loop [While|Until 条件]
144
程序控制结构 说明: 形式1为先判断后执行,有可能一次也不执行;形式2是先执行后判定,至少执行一次。 While用于指明条件为True时执行循环体,Until正好相反。 语句中的[While | Until 条件]省略,表示循环永远为True 。
145
程序控制结构 例如:计算2+4+… 的总和。 方法1: Dim sum , j As Integer Sum=0:j=0 Do Sum + = j: j+=2 If j>100 Then Exit Do Loop Label1.text=sum
146
程序控制结构 方法2: Dim sum As Integer Dim j As Integer Sum=0:j=0 Do While j<=100 Sum + = j: j+=2 Loop Label1.text=sum 方法3: Dim sum, j As Integer Sum=0:j=0 Do Until j>100 Sum + = j: j+=2 Loop Label1.text=sum
147
程序控制结构 方法4: Dim sum As Integer Dim j As Integer Sum=0:j=0 Do Sum + = j: j+=2 Loop While j<=100 Label1.text=sum 方法5: Dim sum, j As Integer Sum=0:j=0 Do Sum + = j: j+=2 Loop Until j>100 Label1.text=sum
148
程序控制结构 4. 其它控制辅助语句 VB.NET中提供的控制辅助语句有: Goto、 Exit ( Exit For、Exit Do、Exit Sub、Exit Function ) End(End if 、End Select、End Sub、End Function、End Structure等)
149
7.3.3 数组 1. 数组的声明与初始化 (1) 声明一维数组形式: Dim 数组名(下标上界) [As 类型 ]
(2)声明二维数组形式: Dim 数组名(下标1上界,下标2上界) [As 类型 ] 注意: 数组下标从0开始算起. 例: Dim a(4) as integer 声明了一个含有5个元素的一维数组。元素为a(0)~a(4).
150
7.3.3 数组 (3). 数组的初始化形式 Dim 数组名( ) As 类型 = { 常量1, 常量2 ,…, 常量n } Dim 数组名( , ) As 类型 = {第一行各常数},…,{第n行各常数 }
151
VB.NET中,所有已声明的数组的大小是可改变的,可以重新定义数组的大小。语句格式为:
7.3.3 数组 2. 重定义数组大小 VB.NET中,所有已声明的数组的大小是可改变的,可以重新定义数组的大小。语句格式为: ReDim [Preserve] 数组名(下标1上界 [,下标2上界]) 例: Dim a(5) As Integer … Redim a(10)
152
7.3.3 数组 说明: 关键字Preserve表示保留数组中内容,否则不保留。 可以用UBound()获得数组的下、上界。例如: dim a1, score(3) as integer A=Ubound(score) ‘为3
153
例如:从键盘接受4个数到数组中,然后显示数组各元素的值。
7.3.3 数组 例如:从键盘接受4个数到数组中,然后显示数组各元素的值。 Private Sub Form1_Load(…)… Dim i, a(3) As Integer Dim str1 As String = "" For i = 1 To 4 a(i-1) = InputBox(“输入第” & i & “个数值”, "数组输入", 0) Next
154
str1 = str1 & a(i).Tostring & “ ” Next MsgBox(“数组各元素值为: " & str1,
7.3.3 数组 For i = 0 To 3 str1 = str1 & a(i).Tostring & “ ” Next MsgBox(“数组各元素值为: " & str1, MsgBoxStyle.Information, "结果") End Sub
155
例7.11:数组排序。随机生成30~100之间的随机整数,然后排序输出。
7.3.3 数组 例7.11:数组排序。随机生成30~100之间的随机整数,然后排序输出。 Private Sub Form1_Load(…)… Dim i , j, n, a(9) ,temp As Integer Randomize() ‘为随机函数的产生不同种子 For i = 0 To 9 a(i) = int( Rnd()*( ) + 30 ) Next n=Ulound(a) ‘获取数组的下标上界 textbox1.text=“”
156
7.3.3 数组 For i=0 to n-1 mini=i for j=i+1 to n If a(mini)>a(j) then mini=j Next j temp=a(i):a(i)=a(mini):a(mini)=temp textbox1.text &=a(i) & “ ” Next I ’ 将a((9)加入到文本框 End Sub
157
过程 P200 VB.NET中过程分为3类:事件过程(如 click)、系统函数过程、自定义过程。 自定义过程为以下几种: Sub子过程:以“Sub”保留字开始,End Sub结束,完成一定的操作功能。子过程无返回值。 2. 函数子过程:以“Function”保留字开始的为函数过程,用户自定义的函数,函数名有返回值。
158
过程 属性过程:以“Property”保留字开始的为属性过程,用于在制作Active控件时为对象添加属性。(略讲) 事件过程:以“Event”保留字开始的为事件过程,用于在制作Active控件时为对象添加事件。(略讲)
159
Function 过程名( 形参声明表)[ As 类型] 局部变量或常量的定义 语句块 Return 表达式 或 函数名=表达式
过程 1. 函数过程的定义和调用 (1) 自定义函数过程 Function 过程名( 形参声明表)[ As 类型] 局部变量或常量的定义 语句块 Return 表达式 或 函数名=表达式 End Function [As 类型]省写,系统默认函数为Double类型
160
过程 (2) 函数过程的调用 形式如下: 变量= 函数过程名([实参列表]) 或 If (函数名 ( 参数列表 ) / 3) <= 表达式 Then ……
161
7.3.4 过程 2. 子过程的定义和调用 (1)子过程的定义 局部变量或常量的定义 语句块 End Sub Sub 过程名( 形参声明表)
过程 2. 子过程的定义和调用 (1)子过程的定义 Sub 过程名( 形参声明表) 局部变量或常量的定义 语句块 End Sub 过程体
162
过程 (2) 子过程的调用 形式如下: 子过程名([实参列表]) 或 Call 子过程名([实参列表])
163
过程 (3) Sub过程与函数过程的区别 ①一般来说,当只有一个返回值时,使用函数过程比较直观;当有多个返回值或无返回值时,习惯用Sub过程,返回值作为形参(地址传递)。 ②函数过程必须有返回值,函数名有类型;Sub过程名没有值,没有类型,不能在子过程体内对子过程赋值。
164
过程 3. 参数传递 在调用过程时,必须把实参传递给形参,形参有值后才能执行过程中代码。 参数传递有2种:传地址(ByRef)和传值(ByVal)。系统默认是值传递。
165
7.3.4 过程 调用过程:Call CountP(str, Sum ) 设初值Str=10,Sum=10 值传递 地址传递 10 Str
过程 Sub CountP(ByVal s% , ByRef Count% ) s=s+100 : Count=count+100 End Sub 值传递 地址传递 调用过程:Call CountP(str, Sum ) 设初值Str=10,Sum=10 10 110 S与Str占用不同的内存空间 Str S 10110 Sum与Count共用内存空间 Sum Count
166
例7.12 分别用子过程、函数过程编程统计字符串中汉字个数,并分别调用,比较两者的异同。
过程 例7.12 分别用子过程、函数过程编程统计字符串中汉字个数,并分别调用,比较两者的异同。 分析:VB.NET中,字符以Unicode码存放,每个西文字符和汉字字符占两个字节。区别是汉字的机内码最高位为1 ,若利用Asc函数求其码值为小于0,而西文字符最高位为0,Asc函数求其码值为大于0的数。
167
7.3.4 过程 演示 Function CountF(ByVal s as string ) as integer
过程 Function CountF(ByVal s as string ) as integer Dim i%, k% , c$ For i=1 to Len(s) C=Mid(s, i, 1) ‘取第i个位置上的字符 If Asc(c)<0 Then k=k+1 ‘汉字数加1 Next CountF=k End Function 演示 Sub CountP(ByVal s as string, ByRef Count as Integer ) Dim i%, c$ For i=1 to Len(s) C=Mid(s, i, 1) ‘取第i个位置上的字符 If Asc(c)<0 Then count+=1 Next End Sub
168
7.4 程序调试 7.4.1 错误类型 VB.NET提供了一组交互的、有效的调试程序的工具。
为了易于找出程序中的错误,可以将错误分为三类:语法错误、运行时错误、逻辑错误。
169
7.4.1 错误类型 1. 语法错误 当用户在代码窗口中编辑代码时,VB.NET会自动对程序进行语法检查,当发现错误时,立即提示用户错误原因。如,关键字输入错误,变量类型不匹配、变量或函数未定义等等。如:
170
7.4.1 错误类型 2. 运行时错误 运行时错误指编辑程序代码时未发现语法错误,运行程序时,发生错误。如类型不匹配、数组下标越界、试图打开一个不存在的文件等。当程序中出现这种错误时,程序会自动中断,并给出有关的错误信息。
171
7.4.1 错误类型 3. 程序逻辑错误 程序运行时,得不到所期望的结果,这说明程序存在逻辑错误。
例如,运算符使用不正确、语句次序不对、循环语句的起始值、终值不正确等。 逻辑错误不会产生提示信息,这类错误较难排除。需要程序设计人员仔细分析程序,在可疑的代码处通过插入断点和逐语句跟踪,检查相关变量的值,来分析错误的原因。
172
7.4.2 调错与排错 设置断点和逐句跟踪 调试窗口
173
Catch [ 表达式 [ As 异常类型 ] ] [ When 表达式]] … ‘处理该类异常 [ Exit Try ] EndTry
7.4.3 结构化异常处理 1.结构化异常处理 形式: Try ‘ 可能引发异常的代码 … Catch [ 表达式 [ As 异常类型 ] ] [ When 表达式]] … ‘处理该类异常 [ Exit Try ] EndTry 用于处理给定代码段中可能出现的某些或所有错误,而同时代码仍保持运行。
174
7.4.3 结构化异常处理 说明: (1) Catch筛选器有三种情况。 ① Catch ex As ExceptionType
ExceptionType指明要捕捉异常的类型,标识符ex用来存取代码中的异常信息。 ② Catch When 条件表达式 是基于任何条件表达式的过滤,用于检测特定的错误号。 ③ Catch 是上述两种的结合,同时用于异常处理。
175
7.4.3 结构化异常处理 例如: Public Sub TryExample()
Dim x As Double = 5 ' Declare variables. Dim y As Integer = 0 Try ' Set up structured error handling. x /= y ' Cause a "Divide by Zero" error. Catch ex As Exception When y = 0 ' Catch the error. MsgBox(ex.ToString) ' Show friendly error message. Finally Beep() ' This line is executed no matter what. End Try End Sub
176
例7.13 此例在窗口的标签装入图形文件(“C:\cut.bmp”),若没有该文件,则显示相关信息。异常处理代码见下页。
7.4.3 结构化异常处理 例7.13 此例在窗口的标签装入图形文件(“C:\cut.bmp”),若没有该文件,则显示相关信息。异常处理代码见下页。
177
7.4.3 结构化异常处理 Try Label1.Image=Image.FromFile _ (“C:\cut.bmp”)
Catch ex As Exception MsgBox(ex.Message & “不存在” , , _ ”错误提示”) Exit Sub End try
178
7.4.3 结构化异常处理 7.4.1 异常的常用属性 属性 说明 HelpLink 属性包含一个URL,指导用户进一步查询异常的有关信息
Message 告知用户错误的性质以其处理该错误的方法 Source 引起异常的对象或应用名
179
除Exception类外, Exception提供了很多异常的子类,表7.1.18列出了常见的异常类及其说明。
7.4.3 结构化异常处理 除Exception类外, Exception提供了很多异常的子类,表7.1.18列出了常见的异常类及其说明。 常见异常类 异常类 说明 Exception 所有异常类的基础类 ArgumentException 变量异常的基础类
180
7.4.3 结构化异常处理 7.4.2 常见异常类(续) 异常类 说明 ArithmetException
在算法、强制类型转换或转换操作上发生错误 IndexOutOfRangeException 数组下标越界 Data.DataException 使用ADO.NET组件时产生的错误 FormatException 参数的格式不符合调用方法的参数规定 IO.IOException 发生I/O错误
181
7.4.3 结构化异常处理 例7.14 如下异常处理程序阶段依次检查数组下标越界、算术表达式计算问题、最后检查普通异常。程序代码如下页所示。
182
7.4.3 结构化异常处理 Try a(2) = 100 / a(0) Catch ex As IndexOutOfRangeException MsgBox(ex.Message, , "出错提示") Catch ex As ArithmeticException Catch ex As Exception End Try
183
作业 实验一
184
谢谢! 联系我们: 同济大学计算机系计算机基础教研室
Similar presentations