You are on page 1of 148

.

NET Framework
.NET Framework

 .NETFramework类库(FCL):它是生成.NET
Framework应用程序、组件和控件的基础。FCL由命名空
间组成。每个命名空间都包含可在程序中使用的类型,
如类、结构、枚举、委托和接口等。
 公共语言运行库(CLR):CLR是.NET
Framework的核心
组件,它在操作系统的顶层,负责管理程序的执行。
 必须使用一个或多个针对CLR的语言编译器,如C#、VB、
或C++等编译器。这些针对CLR的语言称为.NET
Framework兼容语言,相应的编译器称为.NET
Framework兼容编译器。
将代码编译为中间语言

 使用.NETFramework语言编译器把源代码编译成与机器
无关的中间语言MSIL(Intermediate Language),它
不是本机代码。这个编译步骤产生程序集,程序集是在
CLR中可执行的文件,存储在磁盘上,通常具有的扩展名
为.exe或.dll。

 将MSIL编译为本机代码
程序集

 程序集(assembly)是.NET
Framework应用程序的构造
块,是为协同工作而生成的类型和资源的集合,这些类
型和资源构成了一个逻辑功能单元。
 程序集向CLR提供了解类型实现所需要的信息。
项目文件组成

 项目文件包含如下内容:

(1)xxx.sln 项目关联、配置等的信息
(2)xxx.suo 开发环境选项的信息
(3)xxx.vbProj 项目文件
(4)Form1.vb 窗体文件
(5)AssemblyInfo.vb 项目集合信息(系统自动建立)
(6)xxx.exe 可执行文件(在Bin文件夹)
(7)Bin文件夹 可执行文件的默认路径,可用
APPlication.StartuPPath()获得该路径。
(8)Debug 文件夹 存放程序调试产生的信息
第一个例子

Sub Main()

Dim XM As String '定义存放人姓名的变量XM

Dim XB As String '定义存放人性别的变量XB

Console.Write("请输入您的姓名:") : XM = Console.ReadLine() '输入人的姓名

Console.Write("请输入您的性别:") '输出提示信息

XB = Console.ReadLine() '读入人的性别

If XB = "男" Then '对性别进行判断

REM 性别为男时显示的信息

Console.WriteLine("欢迎您,{0}先生!", XM)

Else

REM 性别为女时显示的信息

Console.WriteLine("欢迎您,{0}女士!", XM)

End If

Console.Read() REM 读取一个字符,目的是让程序停下来,以便观察结果

End Sub
注释

 单行注释 ’
 多行注释 REM
变量

 变量实质是内存中的一块空间,变量名为内存单元的名称
,内存单元中所装载的数据就是变量的值。变量的定义格
式如下: Declare 变量名 [As 数据类型] [=初值]

 ①语句中的“Declare”可以是Dim、Public、Protected
、Friend、Private、Shared和Static。

 ②数据类型可以是基本数据类型,也可以是用户自定义的
类型。As部分缺省,创建的变量为Object类型

 ③初值用来定义变量的初值。如果在声明变量的时候没有
给变量赋初值,VB.NET就用数据类型的默认值来给出初始
值,各种数据类型的默认值如下:
变量

 所有的数值类型(包括Byte)为0;Char类型为二进制0。

 Object类型和String类型为NULL。

 Boolean型为False。

 Date型为12:00:00 AM,January l,1。


变量的隐式声明

 在VB.NET中,还可以采用在变量名后面加上一个用于规定
变量类型的说明符,直接确定变量的类型。

类型名 说明符 类型名 说明符


Integer(整型) % Double(双精度 #
型)
Long(长整型) & Decimal(大浮点 @
数型)
Single(单精度 ! String(字符串型) $
型)
变量的隐式声明

例如,有下列语句:
Dim N%=1 '定义N为整型变量并赋值1
Dim Prive!=25.05 '定义Prive为单精度变量
Dim strSQL$="Select * from student"
'定义strSQL为字符串变量,并赋值为"Select * from
student"
Option Explicit

 在类模块、窗体模块或标准模块的开头加入以下语句:
OPtion ExPlicit Off

 那么在使用一个变量之前就不必声明该变量,VB.NET把
遇到的每一个没有定义的标识符均看作一个变量。

 如果希望在使用每一个变量之前,均必须声明,可在类
模块、窗体模块或标准模块的开头加入以下语句:
Option Explicit On
变量命名规范

 必须以字母或汉字开头,由字母、汉字、数字或下划
线组成,长度小于等于255个字符

 不区分变量名的大小写;常量全部用大写字母表示
数据类型
数据类型

1.数值型

(1) 整型
整型数:-2147483648~2147483647

短整型数: -32768~32767
长整型数:-263~263-1

(2) 字节型(Byte)
字节型数可以表示无符号的整数,0~255
(3) 单精度型(Single)和双精度型(Double)
表示带有小数部分的数
表示数的范围大,但有误差。
数据类型

2. 字符串型数据
字符串型数据是用双引号括起来的一串字符。
3. 日期型数据:Dim a As Date = "2018-11-21“
或”12/01/2018”

4.
对象型(Object)数据:以32位的地址形式存储数据,
可以指向任何数据类型。
不特别说明时,VB.NET会自动将该变量默认为Object型变

数据类型
数据
表示方式 取 值 范 围 。 说 明
类型
数值类型的数据类型
整型 Integer –2147483648~2147483647 用于表示简单整数
用于简单算术运算。由于这个类型
字节
Byte 0~255 的变量可以在一个字节中存储,所

以运算速度最快
短整 是整型的一种形式,相对表示范围
Short –32768~32767
型 较小
长整 –9223372036854775808~ 是整型的一种形式,相对表示范围
Long
型 9223372036854775807 较大
单精 –3.402823E38~–1.401298E-45(对于负数)和1.401298E-4
Single 用于存放单精度浮点数
度型 5~3.402823E38(对于正数)
–1.79869313486232E308~
双精 –4.94065645841247E-324(对于负数)
Double 用于存放双精度浮点数
度型 和4.94065645841247E-324~
1.79869313486232E308(对于正数)
当小数位为0的时候,为
–79228162514264337593543950335 ~
79228162514264337593543950335;
小数 Decimal 常用于存储货币值
当小数位为28的时候,为
–7.9228162514264337593543950335 ~
7.9228162514264337593543950335
常量

 符号常量:用户声明,便于程序阅读或修改

Const 符号常量名 [As 类型] = 表达式

 系统常量:系统提供许多内部常量和枚举

例如:vbCrLf 回车/换行组合符

枚举 如控件的颜色、边框线型等
可空类型

 可空类型与其对应的值类型相比,除了值类型允许的
取值之外,还可以赋值为nothing。例如:

Dim age As Integer?

age = Nothing

Console.WriteLine(age)

age = 20

Console.WriteLine(age)
可空类型

 也可在声明的同时赋值:Dim age As Integer? =


nothing;

 与nothing进行相等测试,例如:
If Not age Is Nothing Then
 使用可空类型的HasValue属性,例如:
If age.HasValue Then
 可以使用Value属性(只读)来获取可空类型变量的值,如:

age.Value
可空类型

 也可以通过可空类型的GetValueOrDefault()方法来
返回可空类型变量的值,当可空类型变量的值为
nothing时,该方法将返回该类型变量的默认值,否
则返回其实际值,例如:

n = age. GetValueOrDefault();

 当age为nothing时,n将赋值为integer类型的默认值
0
类型转换

 数据类型的转换有自动转换和强制转换2种。

1.自动转换

要实现自动类型转换,要同时满足2个条件:

 2种类型彼此兼容

 目标类型的取值范围大于源类型
类型转换

2.强制类型转换

当两种类型彼此不兼容,或者目标类型的取值范围小
于源类型,自动转换无法进行,这时就需要进行强制类
型转换。这种从一个大容量的数据类型到小容量的数据
类型的赋值,这可能造成数量级的损失。
Convert

 如果两个类型的变量不兼容,比如 String与Integer
或者String与Double

 这时可以使用Convert进行转换
Dim s = "123"

Dim i = Convert.ToInt32(s)

s = "123.456"

Dim d1 = Convert.ToDouble(s)
Parse和TryParse

 Parse方法可用于类型转换
Dim number = Integer.Parse("123")

 用Convert和Parse进行转换 成功了就成了, 失败了


就抛异常。TryParse与Integer.Parse又较为类似,
但它不会产生异常,转换成功返回 true,转换失败
返回 false。最后一个参数为输出值,如果转换失败
,输出值为 0。
Dim number = 100

Dim b = Integer.TryParse("123abc", number)

Console.WriteLine(number)
将表达式转换为数据类型 允许的要进行转换的表达式数据类型
CBool Boolean 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、String、Object

CByte Byte 数据类型 (VB) 任何数值类型(包括 SByte 和枚举类型)、Boolean、String、Object


CChar Char 数据类型 (VB) String, Object
CDate Date 数据类型 (VB) String, Object

CDbl Double 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CDec Decimal 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CInt Integer 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CLng Long 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CObj Object 数据类型 任何类型

CSByte SByte 数据类型 (VB) 任何数值类型(包括 Byte 和枚举类型)、Boolean、String、Object

CShort Short 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CSng Single 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

任何数值类型(包括 Byte, SByte 和枚举类型)、Boolean、Char、Char 数组、Date、Obje


CStr String 数据类型 (VB)
ct

当转换为“基本数据类型”(包括基本类型数组)时,相应转换关键字所允许的相同类型
CType 逗号 (,) 后面指定的类型 当转换为“复合数据类型”时,其实现的接口和继承的类
当转换为一个已经在其上重载 CType 的类或结构时,该类或结构

CUInt UInteger 数据类型 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CULng ULong 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object

CUShort UShort 数据类型 (VB) 任何数值类型(包括 Byte、SByte 和枚举类型)、Boolean、String、Object


算术运算符
字符串运算符

& 万能型
+ 有条件(左右都是字符串)
1)数值型:则进行算术加运算;
2)一个为数字字符,另一个为数值,自动将数字字符转换
为数值后进行算术加;
3)一个为非数字字符,另一个为数值型,出错。
操作 结果 操作 结果
"ab" & 123 "ab123 " "ab" + 12 出错
"12" & 456 " 12456 " "12" + 456 468
"12" & True "12True" "12" + True 11
注意: 在变量后使用运算符&时,变量与&间应加一个空

关系运算符

运算符 例 结果
= " ABCDE " = " ABR " False
> " ABCDE " > " ABR " False
>= " bc" >= "abcde " True
< 23<3 False
<= " 23 " <=" 3 " True
<> " abc" <> "abcde " True
关系运算符

“1”<“2”…<“A”<“B”…<“a”<“b”…
1.如果 字符串1的第n位(最高位)的ASCII码值 等于 字符串2
的第n位的ASCII码值 ,则 继续比较下一位
2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位
的ASCII码值 ,则 输出结果:1,表示字符串1 > 字符串2;
3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位
的ASCII码值 则 输出结果:-1 表示字符串1 < 字符串2;
4.如果 每一位的ASCII码值都相等,而且长度相同, 则 输出结
果:0 表示字符串1 == 字符串2;
5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较,
则 字符串1<字符串2.
逻辑运算符
选择结构

1. If…Then语句(单分支结构)
If <表达式> Then
语句块
End If
或 If <表达式> Then <语句>
选择结构

2. If…Then…Else语句
If 表达式 Then
语句块1
Else
语句块2
End If
或 If 表达式 Then 语句1 Else 语句2
选择结构

3. If…Then…ElseIf 语句
If 表达式1 Then
语句块1
ElseIf 表达式2 Then
语句块2

[Else
语句块 n+1]
End If
选择结构

 已知变量ch中存放了一个字符,判断该字符是字母字符
、数字字符还是其他字符。
选择结构

If语句的嵌套是指If或Else后面的语句块中又包含If语
If 表达式1 Then
If 表达式2 Then

End If

End If

例 已知x,y,z三个数,使得x>y>z
用一个IF语句和一个嵌套的IF语句实现
选择结构

Select Case 变量或表达式


Case 表达式列表1
语句块1
Case 表达式列表2
语句块2

[Case Else
语句块n+1]
End Select

表达式列表与变量或表达式的类型必须相同,是下面4种形式之一 :
•表达式 例: "A"
•一组用逗号分隔的枚举值 2,4,6,8
•表达式1 To 表达式2 60 To 100
•Is 关系运算符表达式 Is < 60
条件函数

 (1) IIf函数

IIf(表达式,表达式为真时的值,表达式为假时的值)

IIf函数是If … Then …Else 结构的简洁表示

例如,将x,y中大的数,放入Tmax变量中:

Tmax = IIf(x > y,x,y)

该语句与如下语句等价 :

If x > y Then Tmax = x Else Tmax = y


条件函数

 (2) Choose函数

Choose(整数表达式,选项列表)

根据表达式的值i,返回选项列表中第i个选项。如果整数表
达式的值越出选项范围时,返回Null。

例 根据NoP的值,得到+、-、×、÷中的某运算符:

OP= Choose(NoP,"+","-","×","÷")
循环结构

 Do循环用于控制循环次数未知的循环结构。

形式1:

Do { While|Until }<条件>

语句块

[Exit Do

语句块]

LooP
退出和结束语句

1.Exit语句
VB中有多种形式的Exit语句,用于退出某种控制
结构的执行。Exit的形式如下:
Exit For、Exit Do、
Exit Sub、Exit Function
2.End语句
独立的End语句用于结束一个程序的运行,它可
以放在任何事件过程中。
随机产生10个100~200之间的数,
求最大值。

Dim x%, i%, max


x = Int(Rnd() * 101 + 100)
max = x
TextBox1.Text &= x & vbCrLf
For i = 1 To 9
x = Int(Rnd() * 101 + 100)
TextBox1.Text &= x & vbCrLf
If x > max Then max = x
Next i
TextBox1.Text &= "最大值=" & max & vbCrLf
For Each …Next

Dim strArray(4) As String


For Each strTemP As String In strArray
Messagebox.Show(strTemP)
Next

Dim strArray(4) As String


Dim strTemP As String
For Each strTemP In strArray
Messagebox.Show(strTemP)
Next
数组-一维数组

 创建数组的包括以下步骤:

(1)声明一个数组类型的引用变量,简称数组变量。

(2)用new关键字构造数组的实例,new语句为数组分配内存
,并且为数组中的每个元素赋予默认值。

(3)初始化,即为数组的每个元素设置合适的初始值。
数组-一维数组

 定义一维数组的语法格式如下:

Dim 数组名(下标上界) [As 类型]

下标下界为0。一维数组的大小为:下标上界+1。

Dim a(10) As Integer,Dim st(5) As String

声明了一维整型数组a、有11个元素;下标的范围0~10。

st是一维字符串类型数组、有6个元素;下标的范围0~5。
声明和初始化数组的几种形式

Dim c(3) As Integer


★Dim c As Integer()
c = New Integer(3) {1,2,3,4}
★Dim c() As Integer
c = New Integer(3) {1,2,3,4}
★Dim c As Integer()
c = New Integer(3) {}
★Dim c As Integer() = New Integer() {1,2,3,4}
★Dim c() As Integer =() {1,2,3,4}
与数组有关的几个属性、方法

 数组长度

c.Length

 数组上界

c.GetUpperBound(0)

0表示1维,1表示2维,依次类推
多维数组声明

 Dim 数组名(下标1,下标2…) [As 类型]

 下标数决定了数组的维数,每一维的大小=上界+1;数组
的大小为每一维大小的乘积。

 例 Dim x(2,4) As Long

 声明了一个长整型的二维数组 x;共占据3×5个长整型
变量的空间
数组的初始化

Dim 数组() As 类型 ={常数1,…,常数n} ’一维


Dim 数组(,) As 类型 ={{行1常数},…,{行m常
数}}
例 Dim x(,) As Integer = {{1,2,3,4},
{5,6,7,8}}
重定义数组大小

对已经存在的数组可用ReDim语句改变数组大小
ReDim 数组名 (下标[,下标2…])
例 Dim sArray(2,3 ) As Single
Sub Form_Load( )

ReDim sArray(4,8)

End Sub
在过程外声明了二维数组sArray,在Form1_Load事件中重
新指明二维数组的大小为5行9列。
重定义数组大小注意:

 Dim 是说明语句,可出现在程序的任何地方,而ReDim
是执行语句,只能出现在过程中

 在过程中可多次使用ReDim语句来改变数组的大小,但不
能改变维数和类型

 可在ReDim后加Preserve参数用来保留数组中的数据,若
使用Preserve参数后,只能改变最后一维的大小。
交错数组

 多维数组只是数组,交错数组是数组的数组。

 交错数组:元素为数组的数组,元素的维度和大小可以
不同。

 多维数组:元素的维度和大小的均相同。

 与一维或多维数组不同,交错数组需要定义二个()号,在
不指定初始指的情况下,必须指定第一个下标的个数.
交错数组

 1.交错数组的声明

 (1)交错数组的元素为一维数组

 格式一:Dim 数组名(下标上界)() As 数据类型

 例如,Dim arrA(3)() As String

 格式二:Dim 数组名()() As 数据类型1= New 数据类


型2(下标上界)(){}

 例如, Dim arrA()() As String=New string(3)(){}


'声明了包含四个元素的交错数组,而且四个元素都是一
维数组。
交错数组

 (2)交错数组的元素为多维数组

 如果交错数组的元素为二维数组,声明格式为:

 格式一:Dim 数组名(下标上界)(,) As 数据类型

 格式二:Dim 数组名()(,) As 数据类型1= New 数据类型2(下标上界)(,){}

 例如,

 Dim arrA(,) As Integer = {{1, 2, 3}, {4, 5, 6}} 'arrA是2 ×3 的二维


数组

 Dim arrB(,) As Integer = {{1, 2}, {3, 4}, {5, 6},{7,8}} ' arrB是4 ×2
的二维数组

 Dim arrAB(1)(,) As Integer '定义包含2个元素的交错数组arrAB

 arrAB(0) = arrA '交错数组第一个元素赋值为二维数组arrA

 arrAB(1) = arrB ''交错数组第二个元素赋值为二维数组arrA


交错数组

 (2)交错数组的元素为多维数组

 如果交错数组的元素为二维数组,声明格式为:

 格式一:Dim 数组名(下标上界)(,) As 数据类型

 格式二:Dim 数组名()(,) As 数据类型1= New 数据类型2(下标上界)(,){}

 例如,

 Dim arrA(,) As Integer = {{1, 2, 3}, {4, 5, 6}} 'arrA是2 ×3 的二维


数组

 Dim arrB(,) As Integer = {{1, 2}, {3, 4}, {5, 6},{7,8}} ' arrB是4 ×2
的二维数组

 Dim arrAB(1)(,) As Integer '定义包含2个元素的交错数组arrAB

 arrAB(0) = arrA '交错数组第一个元素赋值为二维数组arrA

 arrAB(1) = arrB ''交错数组第二个元素赋值为二维数组arrA


交错数组

 2.交错数组的初始化

 与一般数组相同,可以在声明交错数组的同时进行初始化,例如:

 Dim arrA()() As Integer={New Integer(){1,2,3},New


Integer(){4,5,6,7}}

 对由一维数组构成的交错数组初始化,注意大括号对中的New
Integer()不能省略。

 初始化时,也可以采用New子句,上述初始化语句可以改为:

 Dim arrA()() As Integer=New Integer(1)(){New


Integer(){1,2,3},New Integer(){4,5,6,7}}
交错数组

 对由二维数组构成的交错数组初始化,可以采用以下几种格式:

 Dim arrAB()(,) As Integer = {New Integer(,){{1, 2}, {3,


4}}, New Integer(,){{5, 6}, {7, 8}, {9, 10}}}

 Dim arrAB()(,) As Integer = New Integer(1)(,){New


Integer(,){{1, 2}, {3, 4}}, New Integer(,) {{5, 6}, {7,
8}, {9, 10}}}

 Dim arrAB()(,) As Integer = New Integer()(,){New


Integer(,){{1, 2}, {3, 4}}, New Integer(,) {{5, 6}, {7,
8}, {9, 10}}}
System.Array

 System.Array是所有数组类型的抽象基类。提供创建、操
作、搜索和排序数组的方法,因此所有数组都可以使用它
的属性和方法。

属性 说明
Length 获得一个32位整数,该整数表示Array的所有维数中元素的总数。
LongLength 获得一个64位整数,该整数表示Array的所有维数中元素的总数。
Rank 获取Array的秩(维数)。
方法 说明
BinarySearch 静态方法。使用二进制搜索算法在一维的排序Array中搜索值。
CoPy 静态方法。将一个Array的一部分元素复制到另一个Array中,并根据需要执行
类型强制转换和装箱。
CoPyTo 非静态方法。将当前一维Array的所有元素复制到指定的一维Array中。

Find 静态方法。搜索与指定谓词定义的条件匹配的元素,然后返回整个Array中的
第一个匹配项。
ForEach 静态方法。对指定数组的每个元素执行指定操作。
GetLength 非静态方法。获取一个32位整数,该整数表示Array的指定维中的元素数。

GetLongLength 非静态方法。获取一个64位整数,该整数表示Array的指定维中的元素数。

GetLowerBound 非静态方法。获取Array中指定维度的下限。
GetUPPerBound 非静态方法。获取Array的指定维度的上限。
GetValue 非静态方法。获取当前Array中指定元素的值。
IndexOf 静态方法。返回一维Array或部分Array中某个值第一个匹配项的索引。

Resize 静态方法。将数组的大小更改为指定的新大小。
Reverse 静态方法。反转一维Array或部分Array中元素的顺序。
SetValue 非静态方法。将当前Array中的指定元素设置为指定值。
Sort 静态方法。对一维Array对象中的元素进行排序。
结构类型

数组存放性质相同的数据集合。若不同类型信息
作为一个整体来描述,例如姓名、性别、出生年
月等,通过“Structure”结构类型来解决。
1.结构类型定义:
Structure 结构类型名
成员名声明
End Structure
结构类型

例如,定义一个有关学生信息的结构类型:
Structure studTyPe ' studTyPe为类型名
Dim Name As String ' 姓名
Dim Sex As Char ' 性别
Dim TelePhone As Long ' 电话
Dim School As String ' 学校
End Structure
结构类型

定义了结构类型,就可在变量的声明时使用。
Dim 变量名 As 结构类型名
例如,如下语句:
Dim Student ,MyStud As StudTyPe
声明Student、MyStud为两个同种类型的变量
结构变量成员的引用

引用结构类型变量中的某个成员,形式如下:
结构类型变量名.成员名
例如, Student.Name Student变量中的姓名
Student.Sex性别
可利用With语句简化成员引用:
With 结构变量对象名
语句块
End With
枚举类型

语法:

Enum 类型名称

成员名=表达式(常量)

End Enum
命名空间

 在.NET中,类是通过命名空间(namesPace)来组织的。
命名空间提供了可以将类分成逻辑组的方法,将系统中
的大量类库有序地组织起来。
 可以将命名空间想像成文件夹,类的文件夹就是命名空
间,不同的命名空间内,可以定义许多类。在每个命名
空间下,所有的类都是“独立”且“唯一”的。
命名空间

 使用命名空间有两种方式,一种是明确指出命名空间的
位置,另一种是通过ImPorts关键字引用命名空间。
 直接定位在应用程序中,任何一个命名空间都可以在代
码中直接使用。例如:
System.Console.WriteLine("ABC")
模块

 模块一般就是存放公用的一些方法(Sub)或者函数
(Function)。
 模块里面的方法自动就是静态的(或者称为共享的——
VB.NET中的关键字是Shared),这些方法可以直接调用,
所以Module是无法实例化,也没有必要实例化的。
类和结构类型的差异

类 结构
引用类型 值类型
可以有无参数的构造函数 不能有无参数的构造函

创建对象必须用new关键 创建对象可以不用new关
字 键字
可以能被继承 不能被继承
类的定义
[Public|Friend|NotInheritable|MustInherit] Class 类名
Dim … As …
Dim … As …

Public Sub …

End Sub

Public Sub …..

End Sub

End Class
69
Sub过程

1.Sub过程的定义
定义一个Sub过程的一般格式是:
[Private|Public| Shared] Sub 过程名([参数表])
语句块
[Exit Sub]
End Sub

70
Sub过程

说明:
 (1)Private表示该过程是一个私有过程,只能被本模块(处于同一个窗
体模块或标准模块)中的其他过程所调用;Public表示该过程是一个公
有过程,可以被程序中的所有模块调用;Shared过程表示该过程是一个
静态过程,在静态过程中声明的变量均为静态变量。

 (2)参数表的定义格式是:

[ByVal|ByRef] 变量名或数组名( ) [As 数据类型]

ByVal表示参数按值传递,ByRef表示参数按地址传递。

 (3)Exit Sub语句使程序控制立即从一个Sub过程中退出,程序接着从调
用该Sub过程的语句之后的语句执行。

71
Sub过程

2.Sub过程的调用
(1)使用Call语句,其格式是:
Call 过程名([实参表])
(2)直接使用过程名,并且实参之间不加括号。其格式是:
过程名 [实参表]

72
Sub过程

下面的过程用来计算参数n的阶乘,过程名为JieCheng1。在
定义完该过程后,在一个命令按钮Command1的单击事件中调
用了该过程。
Public Class Form1
Sub JieCheng1(n As Integer)
Dim t As Long, i As Integer
t = 1
For i = 1 To n
t = t * i
Next i
MessageBox.Show(n.ToString() + "!=" +
73 t.ToString())
Sub过程

Private Sub Button1_Click(sender As Object, e As EventArgs)


Handles Button1.Click
Dim k As Integer
k = InPutBox("请输入一个正整数", "计算阶乘", "1")
If k > 0 Then
Call JieCheng1(k) ' 调用Sub过程
Else
MsgBox("输入数据错误", vbOKOnly, "计算阶乘")
End If
End Sub
74
End Class
Function过程

1.Function过程的定义
定义一个Function过程的一般格式是:
[Private|Public|shared] Function过程名 ([参数表])
[As 返回值类型]
语句块
Return 表达式 或 函数名=表达式
[Exit Function]
End Function

75
变量的作用域

 块变量:在控制结构块中声明的变量,只能在本块内有效

 过程级变量:在一个过程内用Dim或Static语句声明的变量
,只能在本过程中使用

 模块级变量:在模块内、任何过程外用Dim、Private等语
句声明的变量,可被本模块的任何过程访问

 全局变量:在模块级用Public语句声明的变量,可被应用
程序的任何过程或函数访问

76
变量的作用域

Public Pa As integer ' 全局变量

Private Mb As String ' 窗体/模块级变量

Sub F1( )

Dim Fa As integer ‘ 过程级变量

End Sub

Sub F2( )

Dim Fb As Single ‘过程级变量

For i=1 to 10

Dim k% ‘ 块变量

Next i

End Sub
77
静态变量

 静态变量:程序运行过程中可保留变量的值

 声明形式:Static 变量名 [AS 类型]

 用Dim声明的变量,每次调用过程时重新初始化

 比较Dim和Static两者的区别。

78

 类的成员
类的成员可以分为两大类:数据成员和函数成员

数据成员 说明
字段 字段存储类要满足其设计所需要的数据,
亦称为数据成员。
属性 属性是类中可以像类中的字段一样被访问
的方法。属性可以为类字段提供保护,避
免字段在对象不知道的情况下被更改。
访问修饰符

 Private 当前类中可以访问,类中成员的默认访问修饰符。

 Protected 当前类及子类中可以访问(在继承中用)

 Friend 当前程序集内部可以访问

 Protected Friend当前程序集或子类中(不同程序集也可
以访问)。

 Public 任何地方
类的成员变量

 成员变量是指在类体中而非在方法中声明的变量,在方法
中声明的变量或方法的参数都是局部变量。成员变量的声
明方式如下:
[Public|Protected|Private|Shared|Friend|Protected
Friend|Readonly] 变量名 AS 数据类型
只读字段

 可以在字段定义时使用readonly 关键字来定义只读字段。

 在定义只读字段时,可以在同一语句中给只读字段赋初值
,或者在该类的构造函数给只读字段赋值,其他地方不能
更改只读字段的值
Public ReadOnly RADIUS As Integer

Public Sub New(ByVal x As Integer)

RADIUS=x

End Sub
静态方法与静态变量

 静态变量

 使用shared修饰的字段称为静态变量。

 类中的静态变量仅分配一块存储区域。

 静态变量在整个程序运行期间都是存在的。

 静态方法

 使用shared声明的方法称为静态方法。

 静态方法只允许访问类的静态成员,而不允许访问其非静态成员(
即实例成员)。

 非静态方法可以访问类中的任何成员(包括静态成员和非静态成员
)。
静态方法与静态变量

 静态成员属于类成员,其访问形式为:

类名.静态成员名

静态成员名 (在本类的成员方法中)
构造函数

 构造函数是在创建给定类型的对象时执行的方法。性质

 构造函数的名称为Sub New。
 构造函数可以重载。
 当类对象声明时,调用哪一个构造函数取决于传递给
它的参数类型。
 构造函数不能被继承。
静态构造函数

 一个类只能有一个静态构造函数,该构造函数不能带任
何参数,不能直接调用,只能在:
1 创建包含静态构造函数的类实例时
2 访问包含静态构造函数的静态成员时
 会先调用静态构造函数,无论创建了多少个类实例,其
静态构造函数都只调用了一次。
Me关键字

 Me在类中使用,是对当前实例的引用。当创建该
类的一个对象时,该对象隐含有一个Me引用,其
作用是引用当前正在操作的对象。
 Me关键字用在方法、构造函数或属性中,用于区
分类的成员和本地变量或参数。
继承

 Inherits关键字
 派生类继承了基类的成员和特征,但Private成员不能继
承。
 VB 不支持多重继承
派生类中成员的可访问性

 派生类全面继承基类中的成员。在派生类中不能
直接访问基类的私有( Private )成员,但可
通过继承自基类的公有(Public)属性或公有方
法对其私有成员进行操作。
Overrides关键字

 Overrides关键字提供从基类继承的成员的新实现。通过
Overrides声明重写的方法称为重写基方法。重写的基方
法必须与Overrides方法具有相同的签名。
 注意:不能重写非Overridable方法或静态方法。重写的
基方法必须是Overridable或override的。
方法隐藏和重写的区别

 方法隐藏:无论基类中的方法是否用了Overridable,继
承类中都可以用Shadows关键字将基类中的方法隐藏,隐
藏是原来的还存在。所以当让基类的对象的引用直接指
向继承类的对象时(多态性),调用该方法则是调用的
基类的方法。
 方法重写:就是在基类中的方法用Overridable关键字来
标识,然后在继承类中对该类进行重写(Override),
这样基类中的方法已经被重写了,已经失去了功能了。
当让基类的对象的引用直接指向继承类的对象时(多态
性),调用该方法则是调用的继承类的方法。
派生类的构造函数执行顺序

 Object类是所有类的
根,它有一个默认的
构造函数。
 基类的构造函数是为
其派生类对象继承的
基类实例变量初始化
。使用MyBase关键字
调用基类的构造方法
。 先访问C的构造函数;在执行C类构造函
数体之前,先访问B的构造函数,…, 先访
 例如:实例化一个C 问基类Object的构造函数。接下来,依
类对象时,构造函数 次执行object类的构造函数体、A类的构
造函数体、… ,最后执行C类的构造函数
的执行过程:
体。
抽象类和最终类

 在类声明中使用MustInherit修饰符的类称为抽象类。抽象
类不能实例化。MustInherit只能用于Class语句。
 在类声明中使用NotInheritable修饰符的类称为最终类。
最终类不能被继承。NotInheritable只能用于Class语句。
 NotOverridable:修饰符定义无法在派生类中重写的基类
的方法。所有方法都为 NotOverridable,除非用
Overridable 修饰符进行标记。应用于Function、
Property、Sub
 MustOverride:修饰符定义的方法在基类中没有实现,必
须在派生类中实现。包含 MustOverride 方法的类必须使
用MustInherit进行标记。应用于Function、Property、
Sub
接口

 接口具有下列特性:
 接口类似于抽象基类。继承接口的任何非抽象类型都
必须实现接口的所有成员。
 不能直接实例化接口。
 接口不包含方法的实现。
 接口自身可从多个接口继承。
 接口也可以继承,一个接口可以从1到多个接口中继
承。即接口允许多继承。
异常

Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Try语句

 Try语句提供了捕获异常的机制。
 有三种使用的格式:
(1)Try后跟一个或多个Catch块语句。
(2)Try后跟一个Finally块语句。
(3)Try后跟一个或多个Catch块语句和一个Finally块语
句。
异常

 (1)Catch语句中异常类型,必须是
System.Exception或其派生类。
 (2)Catch中可以不指定异常类型和异常对象名
,表示捕获所有的异常类型,必须是Try块中最
后一条Catch语句。
.NET 的Exception 层次

 Exception类是所有异常类的基类。每个异常必须用一个
Exception类或其派生类的实例表示。
 例如:
 DivideByZeroException和FormatException都是
Exception类的派生类。
 Exception类中有一个只读属性Message,该属性用来描
述出现异常的信息。
.NET 的Exception 层次

异常类 引发异常的原因
AccessViolationException 试图读写受保护的内存
ApplicationException 发生非致命应用程序错误
ArithmeticException 因算术运算、类型转换或转换操作
DivideByZeroException 试图用零除整数值或十进制数值
FieldAccessException 试图非法访问类中的私有字段或受保护字段
IndexOutOfRangeException 试图访问索引超出数组界限的数值
InvalidCastException 因无效类型转换或显示转换
NotSupportedException 调用的方法不受支持
NullReferenceException 尝试取消引用空对象
OutOfMemoryException 没有足够的内存继续执行应用程序
OverflowException 在选中的上下文所执行的操作导致溢出
FileLoadException 当找到托管程序集却不能加载它
FileNotFoundException 尝试访问磁盘上不存在的文件
Throw语句

 使用Throw语句可以主动抛出异常。
 格式如下:
Throw [异常对象]
 说明:
 省略异常对象时,该语句只能用在Catch语句中,用于再
次引发异常处理。
 带有异常对象时,则抛出指定的异常类。该异常既可以
是预定义的异常类,也可以是自定义的异常类。
 通过Throw抛出异常,使用Catch语句捕获。
用户定义异常类

 用户定义异常类需直接或间接继承Exception类。
集合

 数组从Array类继承了许多的属性和方法,使得
数组复制、排序、搜索等操作都比较便利。但是
使用数组元素时,会受到数组下标上界的限制,
要更改数组的大小,必须使用 ReDim语句。而集
合则不需要事先定义大小,可以根据需要自动分
配大小,可以随意添加、删除某个元素。
集合

 1.集合的类型
 .NET Framework提供了许多常用的集合类型,这些类隶
属于不同名称空间。主要包括用于
System.Collections.Generic 、
System.Collections.Concurrent 和
System.Collections。
 System.Collections中的类不是将元素存储为指定类型
的对象,而是存储为Object 类型的对象,所以,能够存
储任何数据类型的元素。
 System.Collections名称空间提供了以下几个类,包括
ArrayList、 BitArray 、 Hashtable等。
集合

 ArrayList:一个可变大小的数组,可以在其列表中的任
意位置增添或移除数据,而且一个ArrayList对象可以存
储不同种类型的数据。
 BitArray :管理以位值存储的布尔数组。
 Hashtable:实现由键组织的值的集合(Key Value),
排序是基于键的散列完成的(哈希函数)。
 Queue: 实现先进先出的集合(排序方式)。
 Stack :实现后进先出的集合。
 SortedList:实现带有相关键的值的集合,该值按键来
排序,可以通过键或索引来访问。
集合

2.创建与使用集合
在VB.NET中,支持原VB的 collection 集合, 声明格式:
Dim 集合名 As New Collection()
Dim可以换成Public、Static。

对象集合可以目执行三种主要的操作,即添加(或插入),
删除和查找:
Add方法:向集合中增加项目;
Item方法:通过索引或分健值返回一个项目;
Remove方法:通过索引或键值从集合中删除一个项目。
除上述方法外,集合对象还有一个只读属性,即Count,它
返回集合中数据的个数。
ArrayList

1.创建ArrayList对象
格式一:Dim 变量名 As New ArrayList
格式二:Dim 变量名 As ArrayList : 变量名=New ArrayList
例如: Dim Arl As New ArrayList 或
Dim Arl As ArrayList : Arl = New ArrayList
2.ArrayList的常用属性
(1)CaPacity:ArrayList的容量 ,空集合容量为0,非空集合容量为
4,8,16......,每次扩大2倍的方式递增。
(2)Count:获取 ArrayList 中实际包含的元素数。
(3)IsReadOnly:判断 ArrayList 是否为只读。
(4)Item(索引):获取或设置指定索引处的元素,索引是从零开始的整数

ArrayList

 ArrayList用于建立可变长度的数组
格式一:Dim 变量名 As New ArrayList
格式二:Dim 变量名 As ArrayList : 变量名=New
ArrayList
例如: Dim Arl As New ArrayList 或
Dim Arl As ArrayList : Arl = New ArrayList

属性 说明
CaPacity 获取或设置ArrayList可包含的元素数。
Count 获取ArrayList中实际包含的元素数。
Item 获取或设置指定索引处的元素。
方法 说明
Add 将对象添加到ArrayList的结尾处。
AddRange 将一个ICollection对象的元素添加到ArrayList的末尾。
Clear 从ArrayList中移除所有元素。
Clone 创建ArrayList的浅表副本。
Contains 确定某元素是否在ArrayList中。
CoPyTo 将ArrayList或它的一部分复制到一维数组中。
GetRange 返回 ArrayList,它表示源ArrayList中元素的子集。
IndexOf 返回ArrayList或它的一部分中某个值的第一个匹配项的从零开始的索引。
Insert 将元素插入ArrayList的指定索引处。
InsertRange 将集合中的某个元素插入ArrayList的指定索引处。
LastIndexOf 返回ArrayList或它的一部分中某个值的最后一个匹配项的从零开始的索引。
Remove 从ArrayList中移除特定对象的第一个匹配项。
RemoveAt 移除ArrayList的指定索引处的元素。
RemoveRange 从ArrayList中移除一定范围的元素。
Reverse 将ArrayList或它的一部分中元素的顺序反转。
Sort 对ArrayList或它的一部分中的元素进行排序。
ToArray 将ArrayList的元素复制到新数组中。
ToString 返回表示当前Object的String。
Hashtable

 哈希表Hashtable类表示基于密钥的哈希码组织的键 -
值对的集合。 它使用键来访问集合中的元素。该键用于
访问集合中的项目。
Hashtable
List<T>和Dictionary<K,V>

 List(Of T)类似于ArrayList,ArrayList的升级版。
 各种方法:Sort()、Max()、Min()、Sum()…
 Dictionary(Of K,V)类似于Hashtable,Hashtable的升
级版。
HashSet

 HashSet存储的是集合。集合内的元素是不能重复的。
IO

 在VB.NET中可以通过.NET的System.IO模型以流的方式
对各种数据文件进行访问。
 System.IO模型的实现包含在System.IO命名空间中,该
命名空间包含允许读写文件和数据流的类型以及提供基
本文件和文件夹支持的各种类。其中常用的类:
IO
IO
IO
System.IO命名空间中常用的类及其说明
类 说 明
BinaryReader 用特定的编码将基元数据类型读作二进制值

BinaryWriter 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串

BufferedStream 给另一流上的读写操作添加一个缓冲层。无法继承此类

Directory 公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承此

DirectoryInfo 公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类

DriveInfo 提供对有关驱动器的信息的访问
File 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建
FileStream对象
FileInfo 提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建
FileStream 对象,无法继承此类
System.IO命名空间中常用的类及其说明
FileStream 公开以文件为主的Stream,既支持同步读写操作,也支持异步读
写操作
Path 对包含文件或目录路径信息的 String 实例执行操作。这些操作是
以跨平台的方式执行
Stream 提供字节序列的一般视图
StreamReader 实现一个TextReader,使其以一种特定的编码从字节流中读取字

StreamWriter 实现一个TextWriter,使其以一种特定的编码向流中写入字符
StringReader 实现从字符串进行读取的TextReader

StringWriter 实现一个用于将信息写入字符串的 TextWriter。该信息存储在基


础 StringBuilder 中。
TextReader 表示可读取连续字符系列的读取器。
TextWriter 表示可以编写一个有序字符系列的编写器。该类为抽象类
Path

 对包含文件或目录路径信息的 String 实例执行操作。


 Path 类的所有成员都是静态的,因此无需具有路径的实
例即可被调用。
File和FileInfo

 File类提供了创建、删除、复制、移动文件的静态方法
 FileInfo类提供了创建、删除、复制、移动文件的实例
方法。
 OPen()
 Create()
 Delete()
 CoPy()
 Move
 Exist
Directory和Directoryinfo

 Directoryinfo 与Directory的功能类似,但
Directoryinfo需要实例化使用。
 Exists:判断是否存在文件夹
 CreateDirectory:创建c文件夹
 GetCurrentDirectory() 获得当前目录
 GetFiles:获得当前目录下的文件名
 Move:移动文件夹,Directory.Move("d:\\a",
"d:\\c\\f\\");移动文件夹,把d盘下的a文件夹移到
d:\c文件夹下并重命名为f,要求a文件夹存在,并c文件
夹不存在f文件夹
StreamReader

 StreamReader-读取标准文本文件的各行信息
 创建StreamReader对象,可指定带有路径的文件名。
StreamReader类中常用的方法:
 Read方法 从文件(流)中读入下一个字符
 ReadLine方法 从文件(流)中读入下一行字符
 Close方法 关闭打开的文件(流)
 ReadToEnd 方法 从文件(流)的当前位置读到文件(流)的结尾
 Peek 方法 返回文件(流)中的下一个字符,但并不读入该字符
StreamWriter

 使用StreamWriter对象,可以将数据写入文本文件,如果所指定的
文件不存在,则可以创建一个新文件。
swFile = New StreamWriter(“C:\\MyFile.txt”);
swFile = New StreamWriter("f:\aa.txt", True);
 第一个语句,打开文件MyFile.txt准备向该文件写入。
 第二个语句中除了路径参数外,还有一个Boolean型的变量作为第
二个参数。在文件已经存在的情况下,该参数如果为True,则新写
入的数据被追加到文件尾;否则新数据将覆盖旧数据。如果文件不
存在则创建新文件。
StreamWriter

核心的方法有:
Write方法 –向文件中写入一个字符串。
WriteLine方法- 向文件中写入一个字符串和一个换行符。
Close方法 -释放StreamWriter对象,并关闭打开的文件。
FileStream

 Filestream-文件流类
 使用Filestream对象打开(或创建)文件。它的构造函
数比较常用的形式如下:
 Dim fStream As
FileStream(Path,fileMode,fileAccess)
 参数说明:
 Path要包含文件的路径以及文件名;
 fileMode是枚举类型,其成员如表所示;
 fileAccess是枚举类型,包含的属性有Read (只读)、
ReadWrite(读写)、and Write(写操作)。
FileMode枚举成员

 FileMode枚举有几个成员,规定了如何打开或创建文件
成 员 文件存在 文件不存在
APPend 打开文件,流指向文件的 创建一个新文件。只能与
末尾,只能与枚举 枚举FileAccess.Write联合使
FileAccess.Write联合使用 用
Create 删除该文件,然后创建新 创建新文件
文件
CreateNew 抛出异常 创建新文件

OPen 打开现有的文件,流指向 抛出异常


文件的开头
OPenOrCr 打开文件,流指向文件的 创建新文件
eate 开头
Truncate 打开现有文件,清除其内 抛出异常
容。流指向文件的开头,保
留文件的初始创建日期
FileAccess枚举成员

 FileAccess枚举的一个成员,它指定了流的作用。
成 员 说 明
Read 打开文件,用于只读

Write 打开文件,用于只写

ReadWrite 打开文件,用于读写
FileStream-Read和Write方法

Public Overrides Sub Write(array() As Byte, offset As Integer,


count As Integer)
Public Overrides Function Read(array() As Byte, offset As Integer,
count As Integer) As Integer

Read和Write方法格式相似具有一样的3个参数,分别是
 byte型数组,存放准备写入文件流的数据(Write中
),或是从文件流中读出的数据(Read中)
 offset 准备从数组中向文件写入或读出的数据在数
组中的位置
 count 写入或读出的最大字节数。
此外,Write方法是void型的,没有返回值。而Read方法
则有一个返回值,表示读入缓冲区中的总字节数。
FileStream-其他方法

成员名称 说明
Seek 将该流的读写位置设置为定值
Flush 清除该流的所有缓存区,将所有缓存区的数据写入设备中
Close 关闭文件并释放与该文件流相关的任何资源
委托

 委托是一个可以引用方法的对象,当创建一个委托,也
就创建一个引用方法的对象,进而就可以调用那个方法

 委托是一种数据类型。被委托的对象是方法,解决的问
题就是如何将方法作为一个参数进行传递。
委托

 1、定义委托类型
[访问修饰符]delegate 返回类型 委托名(形参);
 2、声明委托对象
委托名 委托实例名;
 3、创建委托对象(确定与哪些方法进行绑定)
委托实例名=new 委托名(某个类的方法)
 4、使用委托调用方法
委托实例名(实参)
委托

 委托注意事项:
1、委托和方法必须具有相同的参数。
2、委托可以调用多个方法,即一个委托对象可以维护一个
可调用方法的列表而不是单独的一个方法,称为多路广
播(多播)。
3、使用+=和-=运算实现方法的增加和减少
委托

 写法:
1、委托 委托名=new 委托(会调用的方法名); 委托名(参数);
2、委托 委托名 =会调用的方法名; 委托名(参数);
3、匿名方法
委托 委托名=delegate(参数){会调用的方法体};委托名(参数);
4、拉姆达表达式
委托 委托名=((参数1,。。参数n)=>{会调用的方法体});委托
名(参数);
5、用Action<T>和Func<T>,第一个无返回值
Func<参数1, 参数2, 返回值> 委托名= ((参数1,参数2) => {带返回
值的方法体 });返回值=委托名(参数1,参数2);
序列化

 序列化目的是以某种存储形成使自定义对象持久化,或
者将这种对象从一个地方传输到另一个地方。
 转换成不同的格式就叫做不同的序列化,比如xml格式,
叫做xml序列化。JavaScript的json格式,叫做
JavaScript序列化。转换成二进制byte[]字节,叫做二
进制序列化。
JavaScript序列化

 BinaryFormatter进行二进制序列化。
 一个类要进行二进制序列化必须标识Serializable,可
以用NonSerializable表示类或属性不能被序列化。

[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized]
public string Sex = "男";
}
String和Stringbuilder

 分别代表字符串常量和字符串变量
 String类型是一个引用类型,但是String对象还有一个重要特点,
那就是一个字符串一旦被创建,就不能修改。每次使用
System.String 类中的方法时,都要在内存中创建一个新的字符串
对象,这就需要为该新对象分配新的空间。在需要对字符串执行重
复修改的情况下,与创建新的 String 对象相关的系统开销可能会
非常大。
 如果要修改字符串而不创建新的对象,则可以使用StringBuilder
类。例如,当在一个循环中将许多字符串连接在一起时,使用
StringBuilder类可以提升性能。
Windows窗体

 Windows窗体提供了定义窗体外观的属性、定义行为的方法和定义
与用户交互的事件
 Windows窗体是从Form类派生而来的控件
 事件处理:事件处理是Windows程序设计的基础,包括鼠标事件、
键事件和焦点事件等。
 应用程序有单文档界面(SDI)、多文档界面(MDI)或Web样式的
界面3种主要的形式
常用事件

 窗体的常用事件有
 Activated:激活窗体时发生
 FormClosed:关闭窗体后发生
 FormClosing:关闭窗体时发生
 Load:加载窗体时发生
 当一个窗体启动时,执行事件过程的次序如下
本窗体上的Load事件过程
本窗体上的Activated事件过程
本窗体上的其他Form级事件过程
本窗体上包含对象的相应事件过程
 一个窗体被卸载时,执行事件过程的次序如下
本窗体上的FormClosing事件过程
本窗体上的FormClosed事件过程
常用事件

 除了事件响应方法之外,窗体还有如下的一些常用方法
 Activate:激活窗体并给予焦点
 Close:关闭窗体
 Focus:使窗体获得焦点
 Hide:隐藏窗体
 Show:按照无模式窗体样式显示窗体
 ShowDialog:按照模式窗体样式显示窗体
Label, TextBox和Button控件

 Label控件属于文本标签控件,用来显示透明底色而用户无法直接
编辑的文字。
 TextBox控件即文本框,显示设计时输入的文本。
 Button控件即按钮控件,常用于启动、停止或中断进程。
 CheckListBox控件
 ComboBox控件
 DateTimePicker控件
 ListBox控件
 MenuStriP控件
 ToolStriP控件
 StatusStriP控件
Label, TextBox和Button控件

 TreeView控件
 ListView控件
 SPlitContainer控件
控件共有属性

 大多数控件共有的基本属性如下
Name属性
Text属性
尺寸大小(Size)属性
位置(Location)属性
字体属性(Font)
颜色属性(BackColor和ForeColor)
可见(Visible)属性
有效(Enabled)属性
Cursor属性
控件共有属性

 大多数控件共有的基本属性如下
Name属性
Text属性
尺寸大小(Size)属性
位置(Location)属性
字体属性(Font)
颜色属性(BackColor和ForeColor)
可见(Visible)属性
有效(Enabled)属性
Cursor属性
打开和保存文件对话框

 OPenFileDialog dlg = new OPenFileDialog();


 dlg.ShowDialog();
Datetime

属性
Date:返回一个DateTime值,显示日期。

Day:返回一个DateTime值,显示一个月中的某日。

DayOfWeek:返回一个DateTime值,显示星期几。

DayOfYear:返回一个DateTime值,显示一年中的某日。

Hour:返回一个DateTime值,显示时。

Millisecond:返回一个DateTime值,显示毫秒。

Minute:返回一个DateTime 数值,显示分。
Month:返回一个DateTime值,显示月份。

Now:返回一个DateTime值,显示当前机器上的日期和时间。
Datetime

 Second:返回一个DateTime值,显示秒。
 TimeOfDay:返回一个DateTime值,显示当日时间。
 Today:返回系统当前日期。
 UtcNow:返回一个DateTime值,显示以协调世界时(UTC)表示的
本机上的日期和时间。
 Year:返回一个DateTime值,显示年份。
Datetime

方法
Add:将指定的TimeSpan值和DateTime值相加。

AddDays:DateTime值加上指定的天数。

AddHours:DateTime值加上指定的小时数。

AddMilliseconds:DateTime值加上指定的毫秒数。

AddMinutes:DateTime值加上指定的分钟数。

AddMonths:DateTime值加上指定的月数。

AddSeconds:DateTime值加上指定的秒数。

AddYears:DateTime值加上指定的年数。

DaysInMonth:返回指定的某一年某个月的天数。
Datetime

 IsLeapYear:返回指出知道的年份是否是闰年。
 Subtract:DateTime值减去指定的时间或时间段。
 ToLocalTime:将当前的协调世界时间转换成当地时间。
 ToLongDateString:将该实例值转换成等值的长日期字符串表示法

 ToLongTimeString:将该实例值转换成等值的长时间字符串表示法

 ToShortDateString:将该实例值转换成等值的短日期字符串表示
法。
 ToShortTimeString:将该实例值转换成等值的短时间字符串表示
法。

You might also like