在本章中,我们将讨论可用于创建VB.Net应用程序的工具。
我们已经提到VB.Net是.Net框架的一部分,用于编写.Net应用程序。 因此,在讨论用于运行VB.Net程序的可用工具之前,让我们先了解VB.Net如何与.Net框架相关。
.NET Framework是一个革命性的平台,可以帮助你编写以下类型的应用:
Windows应用程序
Web应用程序
网页服务
.Net框架应用程序是多平台应用程序。 该框架的设计方式使其可以从以下任何语言使用:Visual Basic,C#,C ++,Jscript和COBOL等。
.Net框架包含一个巨大的代码库,用于客户端语言(如VB.Net)。 这些语言使用面向对象的方法。
所有这些语言可以访问框架以及彼此通信。
以下是.Net框架的一些组件:
公共语言运行时(CLR) Common Language Runtime (CLR)
.NET框架类库 The .Net Framework Class Library
公共语言规范 Common Language Specification
通用类型系统 Common Type System
元数据和组件 Metadata and Assemblies
Windows窗体 Windows Forms
ASP.Net和ASP.Net AJAX
ADO.Net
Windows工作流基础(WF) Windows Workflow Foundation (WF)
Windows演示基础 Windows Presentation Foundation
Windows通讯基础(WCF) Windows Communication Foundation (WCF)
LINQ
对于每个组件执行的工作,请参阅ASP.Net -介绍 ,有关每个组件的详细信息,请参阅微软的文档。
Microsoft为VB.Net编程提供以下开发工具:
1、Visual Studio 2010(VS)
2、Visual Basic 2010 Express(VBE)
3、可视化Web开发
最后两个是免费的。 使用这些工具,您可以将各种VB.Net程序从简单的命令行应用程序写入到更复杂的应用程序。 Visual Basic Express和Visual Web Developer Express版是Visual Studio的精简版本,具有相同的外观和感觉。 它们保留了Visual Studio的大多数功能。 在本教程中,我们使用了Visual Basic 2010 Express和Visual Web Developer(针对Web编程章节)。
你可以从这里下载 。它会自动安装在您的计算机上。 请注意,您需要一个有效的互联网连接安装快速版本。
虽然.NET Framework在Windows操作系统上运行,但有一些替代版本可在其他操作系统上运行。 Mono是.NET Framework的开源版本,包括Visual Basic编译器,可在多种操作系统上运行,包括各种Linux和Mac OS。 最新版本是VB 2012。
Mono的既定目的不仅是能够跨平台运行Microsoft .NET应用程序,而且为Linux开发人员提供更好的开发工具。 Mono可以在许多操作系统上运行,包括Android,BSD,iOS,Linux,OS X,Windows,Solaris和UNIX。
在我们学习VB.Net编程语言的基本构建块之前,让我们看看一个最小的VB.Net程序结构,以便我们可以将它作为未来的章节的参考。
一个VB.Net程序主要由以下几部分组成:
命名空间声明 Namespace declaration
一个类或模块 A class or module
一个或多个程序 One or more procedures
变量 Variables
主过程 The Main procedure
语句和表达式 Statements & Expressions
注释 Comments
让我们看一个简单的代码,打印单词“Hello World”:
Imports SystemModule Module1 'This program will display Hello World Sub Main() Console.WriteLine("Hello World") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Hello, World!
让我们来看看上面的程序中的各个部分:
程序Imports System的第一行用于在程序中包括系统命名空间。The first line of the program Imports System is used to include the System namespace in the program.
下一行有一个Module声明,模块Module1。 VB.Net是完全面向对象的,所以每个程序必须包含一个类的模块,该类包含您的程序使用的数据和过程。The next line has a Module declaration, the module Module1. VB.Net is completely object oriented, so every program must contain a module of a class that contains the data and procedures that your program uses.
类或模块通常将包含多个过程。 过程包含可执行代码,或者换句话说,它们定义了类的行为。 过程可以是以下任何一种:
功能 Function
子 Sub
运算符 Operator
获取 Get
组 Set
AddHandler
RemoveHandler
的RaiseEvent
下一行('这个程序)将被编译器忽略,并且已经在程序中添加了额外的注释。
下一行定义了Main过程,它是所有VB.Net程序的入口点。 Main过程说明了模块或类在执行时将做什么。
Main过程使用语句指定其行为
Console.WriteLine(“Hello World”的)
WriteLine是在System命名空间中定义的Console类的一个方法。 此语句会导致消息"Hello,World !"在屏幕上显示。最后一行Console.ReadKey()是用于VS.NET用户的。 这将阻止屏幕从Visual Studio .NET启动时快速运行和关闭。
如果您使用Visual Studio.Net IDE,请执行以下步骤:
启动Visual Studio。 Start Visual Studio.
在菜单栏,选择文件,新建,项目。 On the menu bar, choose File, New, Project.
从模板中选择Visual Basic。Choose Visual Basic from templates
选择控制台应用程序。Choose Console Application.
使用浏览按钮指定项目的名称和位置,然后选择确定按钮。 Specify a name and location for your project using the Browse button, and then choose the OK button.
新项目显示在解决方案资源管理器中。 The new project appears in Solution Explorer.
在代码编辑器中编写代码。 Write code in the Code Editor.
单击运行按钮或F5键运行项目。 将出现一个包含行Hello World的命令提示符窗口。 Click the Run button or the F5 key to run the project. A Command Prompt window appears that contains the line Hello World.
您可以使用命令行而不是Visual Studio IDE编译VB.Net程序:
打开文本编辑器,并添加上述代码。 Open a text editor and add the above mentioned code.
将文件另存为helloworld.vb。 Save the file as helloworld.vb
打开命令提示符工具并转到保存文件的目录。 Open the command prompt tool and go to the directory where you saved the file.
类型VBC helloworld.vb,然后按回车编译代码。 Type vbc helloworld.vb and press enter to compile your code.
如果在你的代码中没有错误命令提示符下会带你到下一行,并会产生HelloWorld.exe的可执行文件。 If there are no errors in your code the command prompt will take you to the next line and would generate helloworld.exe executable file.
接下来,输入的HelloWorld来执行你的程序。 Next, type helloworld to execute your program.
您将可以看到“Hello World”字样在屏幕上。 You will be able to see "Hello World" printed on the screen.
VB.Net是一种面向对象的编程语言。 在面向对象编程方法中,程序由通过动作相互交互的各种对象组成。 对象可能采取的动作称为方法。 相同类型的对象被认为具有相同的类型,或者更经常地被称为在同一类中。
当我们考虑VB.Net程序时,它可以定义为通过调用对方的方法进行通信的对象的集合。 现在让我们简单地看看类,对象,方法和实例变量是什么意思。
Object 对象-对象具有状态和行为。 示例:狗有状态 - 颜色,名称,品种以及行为 - 摇摆,吠叫,吃饭等。对象是类的实例。
Class 类-类可以被定义为描述其类型的对象支持的行为/状态的模板/蓝图。
Methods 方法-方法基本上是一种行为。一个类可以包含许多方法。一般的程序逻辑在方法中体现,数据的操作和动作的执行也在方法中实现。
实例变量 -每个对象都有其唯一的实例变量集。 对象的状态由分配给这些实例变量的值创建。
例如,让我们考虑一个Rectangle对象。 它具有长度和宽度等属性。 根据设计,它可能需要接受这些属性的值,计算面积和显示细节的方式。
让我们看一个Rectangle类的实现,并在我们的观察的基础上讨论VB.Net基本语法:
Imports SystemPublic Class Rectangle Private length As Double Private width As Double 'Public methods Public Sub AcceptDetails() length = 4.5 width = 3.5 End Sub Public Function GetArea() As Double GetArea = length * width End Function Public Sub Display() Console.WriteLine("Length: {0}", length) Console.WriteLine("Width: {0}", width) Console.WriteLine("Area: {0}", GetArea()) End Sub Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine() End SubEnd Class
当上述代码被编译和执行时,它产生以下结果:
Length: 4.5Width: 3.5Area: 15.75
在上一章中,我们创建了一个包含代码的Visual Basic模块。 Sub Main表示VB.Net程序的入口点。 这里,我们使用包含代码和数据的类。 您使用类来创建对象。 例如,在代码中,r是一个Rectangle对象。
对象是类的一个实例:
Dim r As New Rectangle()
类可以具有可以从外部类访问的成员,如果指定的话。 数据成员称为字段,过程成员称为方法。
可以在不创建类的对象的情况下调用共享方法或静态方法。 通过类的一个对象调用实例方法:
Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine()End Sub
标识符是用于标识类,变量,函数或任何其他用户定义项的名称。 在VB.Net中命名类的基本规则如下:
名称必须以字母开头,后跟一个字母,数字(0 - 9)或下划线。 标识符中的第一个字符不能是数字。
不能包含任何空格或特殊符号(例如:? - +! @#%^&*()[] {}。 ; :“'/和)。但是,可以使用下划线(_)。
不可以使用保留关键字。
下表列出了VB.Net保留的关键字:
AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
ByRef | Byte | ByVal | Call | Case | Catch | CBool |
CByte | CChar | CDate | CDec | CDbl | Char | CInt |
Class | CLng | CObj | Const | Continue | CSByte | CShort |
CSng | CStr | CType | CUInt | CULng | CUShort | Date |
Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
Double | Each | Else | ElseIf | End | End If | Enum |
Erase | Error | Event | Exit | False | Finally | For |
Friend | Function | Get | GetType | GetXML Namespace | Global | GoTo |
Handles | If | Implements | Imports | In | Inherits | Integer |
Interface | Is | IsNot | Let | Lib | Like | Long |
Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
MyClass | Namespace | Narrowing | New | Next | Not | Nothing |
Not Inheritable | Not Overridable | Object | Of | On | Operator | Option |
Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
ReDim | REM | Remove Handler | Resume | Return | SByte | Select |
Set | Shadows | Shared | Short | Single | Static | Step |
Stop | String | Structure | Sub | SyncLock | Then | Throw |
To | True | Try | TryCast | TypeOf | UInteger | While |
Widening | With | WithEvents | WriteOnly | Xor |
数据类型指用于声明不同类型的变量或函数的扩展系统。 变量的类型确定它在存储中占用多少空间以及如何解释存储的位模式。
VB.Net提供了多种数据类型。下表显示的所有数据类型可用的:
数据类型 | 存储分配 | 值范围 |
---|---|---|
Boolean | 取决于实施平台 | 真或假 |
Byte | 1个字节 | 0到255(无符号) |
Char | 2个字节 | 0〜65535(无符号) |
Date | 8个字节 | 00:00:00(午夜),时间为0001年12月31日11时31分至晚上11:59:59 |
Decimal | 16字节 | 0至+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9 ... E + 28),没有小数点; 0到+/- 7.9228162514264337593543950335,其中小数点右边有28个位 |
Double | 8个字节 | -1.79769313486231570E + 308至-4.94065645841246544E-324,对于负值 4.94065645841246544E-324至1.79769313486231570E + 308,对于正值 |
Integer | 4个字节 | -2,147,483,648至2,147,483,647(有符号) |
Long | 8个字节 | -9,223,372,036,854,775,808至9,223,372,036,854,775,807(签字) |
Object | 在32位平台上的4个字节 在64位平台8字节 | 任何类型都可以存储在Object类型的变量中 |
SByte | 1个字节 | -128至127(签字) |
Short | 2个字节 | -32,768至32,767(签字) |
Single | 4个字节 | -3.4028235E + 38至-1.401298E-45为负值; 1.401298E-45至3.4028235E + 38正值 |
String | 取决于实施平台 | 0到大约20亿个Unicode字符 |
UInteger | 4个字节 | 0至4294967295(无符号) |
ULONG | 8个字节 | 0至18,446,744,073,709,551,615(签名) |
User-Defined | 取决于实施平台 | 结构的每个成员具有由其数据类型确定的范围并且独立于其他成员的范围 |
UShort | 2个字节 | 0至65,535(无符号) |
下面的示例演示使用的一些类型︰
Module DataTypes Sub Main() Dim b As Byte Dim n As Integer Dim si As Single Dim d As Double Dim da As Date Dim c As Char Dim s As String Dim bl As Boolean b = 1 n = 1234567 si = 0.12345678901234566 d = 0.12345678901234566 da = Today c = "U"c s = "Me" If ScriptEngine = "VB" Then bl = True Else bl = False End If If bl Then 'the oath taking Console.Write(c & " and," & s & vbCrLf) Console.WriteLine("declaring on the day of: {0}", da) Console.WriteLine("We will learn VB.Net seriously") Console.WriteLine("Lets see what happens to the floating point variables:") Console.WriteLine("The Single: {0}, The Double: {1}", si, d) End If Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
U and, Medeclaring on the day of: 12/4/2012 12:00:00 PMWe will learn VB.Net seriouslyLets see what happens to the floating point variables:The Single:0.1234568, The Double: 0.123456789012346
VB.Net提供以下内联类型转换函数:
SN | 功能和说明 |
---|---|
1 | CBool(表达式) 将表达式转换为布尔数据类型。 |
2 | CByte(表达式) 将表达式转换为字节数据类型。 |
3 | CChar(表达式) 将表达式转换为Char数据类型。 |
4 | CDate(表达式) 将表达式转换为Date数据类型 |
5 | CDbl(表达式) 将表达式转换为双精度数据类型。 |
6 | CDec(表达式) 将表达式转换为十进制数据类型。 |
7 | CInT(表达式) 将表达式转换为整数数据类型。 |
8 | CLng函数(表达式) 将表达式转换为长数据类型。 |
9 | CObj(表达式) 将表达式转换为对象类型。 |
10 | CSByte(表达式) 将表达式转换为SByte数据类型。 |
11 | CShort(表达式) 将表达式转换为短数据类型。 |
12 | CSng函数(表达式) 将表达式转换为单一数据类型。 |
13 | CStr的(表达式) 将表达式转换为字符串数据类型。 |
14 | CUInt(表达式) 将表达式转换为UInt数据类型。 |
15 | CULng(表达式) 将表达式转换为ULng数据类型。 |
16 | CUShort(表达式) 将表达式转换为UShort数据类型。 |
下面的例子演示了其中的一些功能:
Module DataTypes Sub Main() Dim n As Integer Dim da As Date Dim bl As Boolean = True n = 1234567 da = Today Console.WriteLine(bl) Console.WriteLine(CSByte(bl)) Console.WriteLine(CStr(bl)) Console.WriteLine(CStr(da)) Console.WriteLine(CChar(CChar(CStr(n)))) Console.WriteLine(CChar(CStr(da))) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
True-1True12/4/201211
类型 | 示例 |
---|---|
Integral types | SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong and Char |
Floating point types | Single and Double |
Decimal types | Decimal |
Boolean types | True or False values, as assigned |
Date types | Date |
Dim语句用于一个或多个变量的变量声明和存储分配。 Dim语句用于模块,类,结构,过程或块级别。
[ < attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]][ ReadOnly ] Dim [ WithEvents ] variablelist
1、attributelist是适用于变量的属性列表。 可选的。
2、accessmodifier定义变量的访问级别,它具有值 - Public,Protected,Friend,Protected Friend和Private。 可选的。
3、Shared共享声明一个共享变量,它不与类或结构的任何特定实例相关联,而是可用于类或结构的所有实例。 可选的。
4、Shadows阴影表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。 可选的。
5、Static表示变量将保留其值,即使在声明它的过程终止之后。 可选的。
6、ReadOnly表示变量可以读取,但不能写入。 可选的。
7、WithEvents指定该变量用于响应分配给变量的实例引发的事件。 可选的。
8、Variablelist提供了声明的变量列表。
变量列表中的每个变量具有以下语法和部分:
variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ]
1、variablename:是变量的名称
2、boundslist:可选。 它提供了数组变量的每个维度的边界列表。
3、New:可选。 当Dim语句运行时,它创建一个类的新实例。
4、datatype:如果Option Strict为On,则为必需。 它指定变量的数据类型。
5、initializer:如果未指定New,则为可选。 创建时评估并分配给变量的表达式。
一些有效的变量声明及其定义如下所示:
Dim StudentID As IntegerDim StudentName As StringDim Salary As DoubleDim count1, count2 As IntegerDim status As BooleanDim exitButton As New System.Windows.Forms.ButtonDim lastTime, nextTime As Date
变量被初始化(赋值)一个等号,然后是一个常量表达式。 初始化的一般形式是:
variable_name = value;
例如,
Dim pi As Doublepi = 3.14159
您可以在声明时初始化变量,如下所示:
Dim StudentID As Integer = 100Dim StudentName As String = "Bill Smith"
尝试下面的例子,它使用各种类型的变量:
Module variablesNdataypes Sub Main() Dim a As Short Dim b As Integer Dim c As Double a = 10 b = 20 c = a + b Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a = 10, b = 20, c = 30
System命名空间中的控制台类提供了一个函数ReadLine,用于接受来自用户的输入并将其存储到变量中。 例如,
Dim message As Stringmessage = Console.ReadLine
下面的例子说明:
Module variablesNdataypes Sub Main() Dim message As String Console.Write("Enter message: ") message = Console.ReadLine Console.WriteLine() Console.WriteLine("Your Message: {0}", message) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果(假设用户输入的Hello World):
Enter message: Hello World Your Message: Hello World
有两种表达式:
变量是左值,因此可能出现在作业的左侧。 数字文字是右值,因此可能不会分配,不能出现在左侧。 以下是有效的语句:
Dim g As Integer = 20
但以下并不是有效的语句,并会生成编译时的错误:
20 = g
constants 常数指的是程序在执行过程中可能不会改变的固定值。 这些固定值也称为文字。
enumeration 枚举是一组命名的整数常量。
[ < attributelist> ] [ accessmodifier ] [ Shadows ] Const constantlist
1、attributelist:指定应用于常量的属性列表; 您可以提供多个属性,以逗号分隔。 可选的。
2、accessmodifier:指定哪些代码可以访问这些常量。 可选的。 值可以是:Public, Protected, Friend, Protected Friend, or Private.
3、Shadows:这使常量隐藏基类中相同名称的编程元素。 可选的。
4、Constantlist:给出声明的常量的名称列表。 必填。
其中,每个常量名都有以下语法和部分:
constantname [ As datatype ] = initializer
1、constantname 常量名:指定常量的名称
2、data type 数据类型:指定常量的数据类型
3、initializer 初始值设定:指定分配给常量的值
例如,
'The following statements declare constants.'Const maxval As Long = 4999Public Const message As String = "HELLO" Private Const piValue As Double = 3.1415
以下示例演示了常量值的声明和使用:
Module constantsNenum Sub Main() Const PI = 3.14159 Dim radius, area As Single radius = 7 area = PI * radius * radius Console.WriteLine("Area = " & Str(area)) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Area = 153.938
VB.Net提供以下打印和显示常量:
Constant | 描述 |
---|---|
vbCrLf | 回车/换行字符组合。 |
vbCr | 回车字符。 |
vbLf | 换行字符。 |
vbNewLine | 换行字符。 |
vbNullChar | 空字符。 |
vbNullString | 不等于零长度字符串(“”); 用于调用外部过程。 |
vbObjectError | 错误号。用户定义的错误号应大于此值。例如: Err.Raise(数字)= vbObjectError + 1000 |
vbTab | 标签字符。 |
vbBack | 退格字符。 |
[ < attributelist > ] [ accessmodifier ] [ Shadows ] Enum enumerationname [ As datatype ] memberlistEnd Enum
1、attributelist:指应用于变量的属性列表。 可选的。
2、asscessmodifier:指定哪些代码可以访问这些枚举。 可选的。 值可以是:公共,受保护,朋友或私人。
3、Shadows:这使枚举隐藏基类中相同名称的编程元素。 可选的。
4、enumerationname:枚举的名称。 必填
5、datatype:指定枚举的数据类型及其所有成员。
6、memberlist:指定在此语句中声明的成员常数的列表。 必填。
成员列表中的每个成员具有以下语法和部分:
[< attribute list>] member name [ = initializer ]
name 名称 :指定成员的名称。必填。
initializer 初始化 :分配给枚举成员的值。可选的。
例如,
Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7End Enum
以下示例演示了Enum变量颜色的声明和使用:
Module constantsNenum Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7 End Enum Sub Main() Console.WriteLine("The Color Red is : " & Colors.red) Console.WriteLine("The Color Yellow is : " & Colors.yellow) Console.WriteLine("The Color Blue is : " & Colors.blue) Console.WriteLine("The Color Green is : " & Colors.green) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The Color Red is: 1The Color Yellow is: 3The Color Blue is: 6The Color Green is: 4
下表提供了VB.Net修饰符的完整列表:
S.N | 修饰符 | 描述 |
---|---|---|
1 | Ansi | 指定Visual Basic应该将所有字符串编组到美国国家标准协会(ANSI)值,而不考虑正在声明的外部过程的名称。 |
2 | Assembly | 指定源文件开头的属性适用于整个程序集。 |
3 | Async | 表示它修改的方法或lambda表达式是异步的。 这样的方法被称为异步方法。 异步方法的调用者可以恢复其工作,而不必等待异步方法完成。 |
4 | Auto | 在外部过程的调用期间,十进制中的chchetetmodifierpart提供用于编组字符串的字符集信息。 它还会影响Visual Basic如何在外部文件中搜索外部过程名称。 Auto修饰符指定Visual Basic应根据.NET Framework规则编组字符串。 |
5 | ByRef | 指定参数通过引用传递,即被调用过程可以更改调用代码中参数下面的变量的值。 它在下列语境下使用:
|
6 | BYVAL | 指定传递参数时,调用过程或属性不能更改调用代码中参数下面的变量的值。 它在下列语境下使用:
|
7 | Default | 标识属性作为它的类、 结构或接口的默认属性。 |
8 | Friend | 指定一个或多个声明的编程元素可以从包含其声明的程序集中访问,而不仅仅是声明它们的组件。 Friendaccess通常是应用程序编程元素的首选级别,Friend是接口,模块,类或结构的默认访问级别。
|
9 | In | 它用于通用接口和代理。 |
10 | Iterator | 指定函数或Get访问器是迭代器。 Aniterator对集合执行自定义迭代。 |
11 | Key | Key关键字使您能够为匿名类型的属性指定行为。 |
12 | Module | 指定源文件开头的属性适用于当前装配模块。 它与Module语句不同。 |
13 | MustInherit | 指定一个类只能用来作为基类,并且你不能直接创建一个对象。 |
14 | MustOverride | 指定属性或过程未在此类中实现,必须在导出类中重写,然后才能使用。 |
15 | Narrowing | 表示转换运算符(CType)将类或结构转换为可能不能保存原始类或结构的某些可能值的类型。 |
16 | NotInheritable | 指定类不能用作基类。 |
17 | NotOverridable | 指定不能在派生类中重写属性或过程。 |
18 | Optional | 指定当程序被调用的过程参数可以被省略。 |
19 | Out | 对于通用类型参数,Out关键字指定类型是协变的。 |
20 | Overloads | 指定属性或过程重新声明具有相同名称的一个或多个现有属性或过程。 |
21 | Overridable | 指定属性或过程可以由派生类中具有相同名称的属性或过程覆盖。 |
22 | Overrides | 指定属性或过程覆盖从基类继承的命名相同的属性或过程。 |
23 | ParamArray | ParamArray允许您将任意数量的参数传递给过程。 ParamArray参数始终使用ByVal声明。 |
24 | Partial | 表示类或结构声明是类或结构的部分定义。 |
25 | Private | 指定一个或多个声明的编程元素只能在其声明上下文中访问,包括来自任何包含的类型。 |
26 | Protected | 指定一个或多个声明的编程元素只能从其自己的类或派生类中访问。 |
27 | Public | 指定一个或多个声明的编程元素没有访问限制。 |
28 | ReadOnly | 指定可以读取但不写入变量或属性。 |
29 | Shadows | 指定声明的编程元素在基类中重新声明和隐藏相同命名的元素或一组重载的元素。 |
30 | Shared | 指定一个或多个声明的编程元素与类或结构(而不是类或结构的特定实例)关联。 |
31 | Static | 指定一个或多个已声明的局部变量将继续存在,并在声明它们的过程终止后保留其最新值。 |
32 | Unicode | 指定Visual Basic应将所有字符串编组为Unicode值,而不考虑正在声明的外部过程的名称。 |
33 | Widening | 表示转换运算符(CType)将类或结构转换为可以保存原始类或结构的所有可能值的类型。 |
34 | WithEvents | 指定一个或多个声明的成员变量引用可以引发事件的类的实例。 |
35 | WriteOnly | 指定可以写入但不读取属性。 |
statement 声明是Visual Basic程序中的完整指令。 它可以包含关键字,运算符,变量,字面值,常量和表达式。
2、Executable statements 可执行语句 - 这些是启动动作的语句。 这些语句可以调用方法或函数,通过代码块循环或分支,或者将值或表达式赋值给变量或常量。 在最后一种情况下,它被称为Assignment语句。
S.N | 声明和说明 | 示例 |
---|---|---|
1 | Dim Statement Dim语句 Declares and allocates storage space for one or more variables. 声明和分配一个或多个变量的存储空间。 | Dim number As IntegerDim quantity As Integer = 100Dim message As String = "Hello!" |
2 | Const Statement Const语句 Declares and defines one or more constants. 声明和定义一个或多个常量。 | Const maximum As Long = 1000Const naturalLogBase As Object = CDec(2.7182818284) |
3 | Enum Statement 枚举语句 Declares an enumeration and defines the values of its members. 声明一个枚举并定义其成员的值。 | Enum CoffeeMugSize Jumbo ExtraLarge Large Medium SmallEnd Enum |
4 | Class Statement 类语句 Declares the name of a class and introduces the definition of the variables, properties, events, and procedures that the class comprises. 声明类的名称,并引入该类包含的变量,属性,事件和过程的定义。 | Class BoxPublic length As DoublePublic breadth As Double Public height As DoubleEnd Class |
5 | Structure Statement 结构声明 Declares the name of a structure and introduces the definition of the variables, properties, events, and procedures that the structure comprises. 声明结构的名称,并引入结构所包含的变量,属性,事件和过程的定义。 | Structure BoxPublic length As Double Public breadth As Double Public height As DoubleEnd Structure |
6 | Module Statement 模块语句 Declares the name of a module and introduces the definition of the variables, properties, events, and procedures that the module comprises. 声明模块的名称,并介绍模块包含的变量,属性,事件和过程的定义。 | Public Module myModuleSub Main()Dim user As String = InputBox("What is your name?") MsgBox("User name is" & user)End Sub End Module |
7 | Interface Statement 接口语句Declares the name of an interface and introduces the definitions of the members that the interface comprises. 声明接口的名称,并介绍接口包含的成员的定义。 | Public Interface MyInterface Sub doSomething()End Interface |
8 | Function Statement 函数语句 Declares the name, parameters, and code that define a Function procedure. 声明定义函数过程的名称,参数和代码。 | Function myFunction(ByVal n As Integer) As Double Return 5.87 * nEnd Function |
9 | Sub Statement 子语句 Declares the name, parameters, and code that define a Sub procedure. 声明定义Sub过程的名称,参数和代码。 | Sub mySub(ByVal s As String) ReturnEnd Sub |
10 | Declare Statement 声明语句 Declares a reference to a procedure implemented in an external file. 声明对在外部文件中实现的过程的引用。 | Declare Function getUserNameLib "advapi32.dll" Alias "GetUserNameA" ( ByVal lpBuffer As String, ByRef nSize As Integer) As Integer |
11 | Operator Statement 运算符声明 Declares the operator symbol, operands, and code that define an operator procedure on a class or structure. 声明的运算符符号、 操作数和在类或结构定义一个运算符过程的代码。 | Public Shared Operator +(ByVal x As obj, ByVal y As obj) As obj Dim r As New obj' implemention code for r = x + y Return r End Operator |
12 | Property Statement 属性声明 Declares the name of a property, and the property procedures used to store and retrieve the value of the property. 声明属性的名称,以及用于存储和检索属性值的属性过程。 | ReadOnly Property quote() As String Get Return quoteString End Get End Property |
13 | Event Statement 事件声明 Declares a user-defined event. 声明用户定义的事件。 | Public Event Finished() |
14 | Delegate Statement 委托声明 Used to declare a delegate. 用于声明一个委托。 | Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double |
以下示例演示了一个决策语句:
Module decisions Sub Main() 'local variable definition ' Dim a As Integer = 10 ' check the boolean condition using if statement ' If (a < 20) Then ' if condition is true then print the following ' Console.WriteLine("a is less than 20") End If Console.WriteLine("value of a is : {0}", a) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a is less than 20;value of a is : 10
VB.Net编译器没有单独的预处理器; 然而,指令被处理,就像有一个。 在VB.Net中,编译器指令用于帮助条件编译。 与C和C ++指令不同,它们不用于创建宏。
VB.Net提供了以下一组编译器指令:
The #Const 指令
The #ExternalSource 指令
The #If...Then...#Else 指令
The #Region 指令
该指令定义条件编译常量。语法这个指令是:
#Const constname = expression
constname:指定常量的名称。必要。
expression :它是文字或其他条件编译器常量,或包含任何或所有算术或逻辑运算符(除了Is)的组合。
例如,
#Const state = "WEST BENGAL"
示例
以下代码演示了伪指令的使用:
Module mydirectives#Const age = TrueSub Main() #If age Then Console.WriteLine("You are welcome to the Robotics Club") #End If Console.ReadKey()End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
You are welcome to the Robotics Club
#ExternalSource( StringLiteral , IntLiteral ) [ LogicalLine ]#End ExternalSource
#ExternalSource伪指令的参数是外部文件的路径,第一行的行号和发生错误的行。
示例
以下代码演示了伪指令的使用:
Module mydirectives Public Class ExternalSourceTester Sub TestExternalSource() #ExternalSource("c:vbprogsdirectives.vb", 5) Console.WriteLine("This is External Code. ") #End ExternalSource End Sub End Class Sub Main() Dim t As New ExternalSourceTester() t.TestExternalSource() Console.WriteLine("In Main.") Console.ReadKey() End Sub
当上述代码被编译和执行时,它产生了以下结果:
This is External Code.In Main.
#If expression Then statements[ #ElseIf expression Then [ statements ]...#ElseIf expression Then [ statements ] ][ #Else [ statements ] ]#End If
例如,
#Const TargetOS = "Linux"#If TargetOS = "Windows 7" Then ' Windows 7 specific code#ElseIf TargetOS = "WinXP" Then ' Windows XP specific code#Else ' Code for other OS#End if
示例
下面的代码演示一个假设使用的指令:
Module mydirectives#Const classCode = 8 Sub Main() #If classCode = 7 Then Console.WriteLine("Exam Questions for Class VII") #ElseIf classCode = 8 Then Console.WriteLine("Exam Questions for Class VIII") #Else Console.WriteLine("Exam Questions for Higher Classes") #End If Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Exam Questions for Class VIII
#Region "identifier_string" #End Region
例如,
#Region "StatsFunctions" ' Insert code for the Statistical functions here.#End Region
运算符是一个符号,通知编译器执行特定的数学或逻辑操作。 VB.Net丰富的内置运算符,并提供以下类型的常用运算符:
算术运算符
比较运算符
逻辑/位运算符
位移位运算符
赋值运算符
其他运算符
本教程将介绍最常用的运算符。
下表显示了VB.Net支持的所有算术运算符。 假设变量A保持2,变量B保持7,则:
运算符 | 描述 | 例 |
---|---|---|
^ | 将一个操作数作为为另一个的幂 | B^A will give 49 |
+ | 添加两个操作数s | A + B will give 9 |
- | 从第一个操作数中减去第二个操作数 | A - B will give -5 |
* | 将两个操作数相乘 | A * B will give 14 |
/ | 将一个操作数除以另一个操作数,并返回一个浮点结果 | B / A will give 3.5 |
将一个操作数除以另一个操作数,并返回一个整数结果 | B A will give 3 | |
MOD | 模数运算符和整数除法后的余数 | B MOD A will give 1 |
下表显示了VB.Net支持的所有比较运算符。 假设变量A保持10,变量B保持20,则:
运算符 | 描述 | 例 |
---|---|---|
= | 检查两个操作数的值是否相等; 如果是,则结果变为真。 | (A = B)是不正确的。 |
<> | 检查两个操作数的值是否相等; 如果值不相等,则结果为真。 | (A<>B)为真。 |
> | 检查左操作数的值是否大于右操作数的值; 如果是,则结果变为真。 | (A> B)是不正确的。 |
< | 检查左操作数的值是否小于右操作数的值; 如果是,则结果变为真。 | (A <B)为真。 |
> = | 检查左操作数的值是否大于或等于右操作数的值; 如果是,则结果变为真。 | (A> = B)是不正确的。 |
<= | 检查左操作数的值是否小于或等于右操作数的值; 如果是,则结果变为真。 | (A <= B)为真。 |
下表显示了VB.Net支持的所有逻辑运算符。 假设变量A保持布尔值True,变量B保持布尔值False,则:
运算符 | 描述 | 例 |
---|---|---|
And | 它是逻辑以及按位AND运算符。 如果两个操作数都为真,则条件为真。 此运算符不执行短路,即,它评估两个表达式。 | (A和B)为假。 |
Or | 它是逻辑以及按位或运算符。 如果两个操作数中的任何一个为真,则条件为真。 此运算符不执行短路,即,它评估两个表达式。 | (A或B)为真。 |
Not | 它是逻辑以及按位非运算符。 用于反转其操作数的逻辑状态。 如果条件为真,则逻辑非运算符将为假。 | 没有(A和B)为真。 |
Xor | 它是逻辑以及按位逻辑异或运算符。 如果两个表达式都为True或两个表达式都为False,则返回True; 否则返回False。 该运算符不会执行短路,它总是评估这两个表达式,并且没有该运算符的短路对应。 | 异或B为真。 |
AndAlso | 它是逻辑 AND 运算符。它仅适用于布尔型数据。它执行短路。 | (A AndAlso运算B)为假。 |
OrElse | 它是逻辑或运算符。 它只适用于布尔数据。 它执行短路。 | (A OrElse运算B)为真。 |
IsFalse | 它确定表达式是否为假。 | |
IsTrue | 它确定表达式是否为真。 |
p | q | p&Q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设A = 60; 和B = 13; 现在的二进制格式,他们将如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
〜A = 1100 0011
运算符 | 描述 | 示例 |
---|---|---|
And | 如果两个操作数都存在,则按位AND运算符将一个位复制到结果。 | (A AND B) will give 12, which is 0000 1100 |
Or | 二进制OR运算符复制一个位,如果它存在于任一操作数。 | (A Or B) will give 61, which is 0011 1101 |
Xor | 二进制XOR运算符复制该位,如果它在一个操作数中设置,但不是两个操作数。 | (A Xor B) will give 49, which is 0011 0001 |
Not | 二进制补码运算符是一元的,具有“翻转”位的效果。 | (Not A ) will give -61, which is 1100 0011 in 2's complement form due to a signed binary number. |
<< | 二进制左移位运算符。 左操作数值向左移动由右操作数指定的位数。 | A << 2 will give 240, which is 1111 0000 |
>> | 二进制右移运算符。 左操作数值向右移动由右操作数指定的位数。 | A >> 2 will give 15, which is 0000 1111 |
运算符 | 描述 | 例 |
---|---|---|
= | 简单赋值操作符,将值从右侧操作数分配给左侧操作数 | C = A + B A + B将赋值为C |
+ = | 添加AND赋值运算符,向左操作数添加右操作数,并将结果赋值给左操作数 | C + = A等于C = C + A |
- = | 减法AND赋值运算符,它从左操作数中减去右操作数,并将结果赋值给左操作数 | Ç - = A等于C = C - A |
* = | 乘法AND赋值运算符,它将右操作数与左操作数相乘,并将结果赋值给左操作数 | C * = A等于C = C * A |
/ = | 除法AND赋值运算符,它用右操作数划分左操作数,并将结果分配给左操作数(浮点除法) | C / = A等于C = C / A |
= | 除法AND赋值运算符,它用右操作数划分左操作数,并将结果分配给左操作数(整数除法) | ç = A等于C = C A |
^ = | 指数和赋值运算符。 它将左操作数提升为右操作数的幂,并将结果分配给左操作数。 | C ^ = A等于C = C ^ A |
<< = | 左移AND赋值运算符 | C语言的<< = 2是同C = C << 2 |
>> = | 右移AND赋值运算符 | C >> = 2 >> 2同C = C |
&= | 将String表达式连接到String变量或属性,并将结果分配给变量或属性。 | STR1&= STR2赛车是一样的 STR1 = STR1与STR2 |
有很少其他重要的操作系统支持VB.Net。
运算符 | 描述 | 例 |
---|---|---|
AddressOf | 返回过程的地址。 | AddHandler Button1.Click,AddressOf Button1_Click |
Await | 它应用于异步方法或lambda表达式中的操作数,以暂停该方法的执行,直到等待的任务完成。 | Dim result As res= Await AsyncMethodThatReturnsResult()Await AsyncMethod() |
GetType | 它返回指定类型的Type对象。 Type对象提供有关类型的信息,例如其属性,方法和事件。 | MsgBox(GetType(Integer).ToString()) |
Function Expression | 它声明定义函数lambda表达式的参数和代码。 | Dim add5 = Function(num As Integer) num + 5'prints 10Console.WriteLine(add5(5)) |
If | 它使用短路评估有条件地返回两个值之一。 可以使用三个参数或两个参数调用If运算符。 | Dim num = 5Console.WriteLine(If(num >= 0,"Positive", "Negative")) |
运算符优先级确定表达式中的术语分组。 这会影响表达式的计算方式。 某些运算符比其他运算符具有更高的优先级; 例如,乘法运算符的优先级高于加法运算符:
例如,x = 7 + 3 * 2; 这里,x被分配13,而不是20,因为operator *具有比+高的优先级,所以它首先乘以3 * 2,然后加到7。
这里,具有最高优先级的运算符出现在表的顶部,具有最低优先级的运算符出现在底部。 在表达式中,将首先计算较高优先级运算符。
运算符 | 优先级 |
---|---|
Await | 最高 |
Exponentiation (^) | |
Unary identity and negation (+, -) | |
Multiplication and floating-point division (*, /) | |
Integer division () | |
Modulus arithmetic (Mod) | |
Addition and subtraction (+, -) | |
Arithmetic bit shift (<<, >>) | |
All comparison operators (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is) | |
Negation (Not) | |
Conjunction (And, AndAlso) | |
Inclusive disjunction (Or, OrElse) | |
Exclusive disjunction (Xor) | 最低 |
决策结构需要 程序员指定一个或多个条件进行评估或测试程序和语句或语句的执行, 如果确定的条件为真,并选择,如果确定的条件为假,则执行其它语句。
以下是决策的典型结构发现在大多数编程语言的一般形式︰
VB.Net 提供以下类型的决策语句。
单击以下链接以检查其详细信息。
声明 | 描述 |
---|---|
If ... Then statement | An If...Then statement consists of a boolean expression followed by one or more statements. 一个If...Then语句由一个布尔表达式后跟一个或多个语句组成。 |
If...Then...Else statement | An If...Then statement can be followed by an optional Else statement, which executes when the boolean expression is false. 一个If...Then语句后面可以是一个可选的Else语句 ,当布尔表达式为假时执行。 |
nested If statements | You can use one If or Else if statement inside another If or Else if statement(s). 您可以在一个if或else if语句中使用If或Else if语句。 |
Select Case statement | You can use one If or Else if statement inside another If or Else if statement(s). Select Case语句允许根据值列表测试变量的相等性。 |
nested Select Case statements | You can use one select case statement inside another select case statement(s). 您可以使用一个select case语句中使用一个 select case语句。 |
可能有一种情况,当你需要执行一段代码几次。
一般来说,语句是按顺序执行的:函数中的第一个语句首先执行,然后是第二个语句,依此类推。
编程语言提供允许更复杂的执行路径的各种控制结构。
循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式:
VB.Net 提供以下类型的循环来处理循环需求。 单击以下链接以检查其详细信息。
循环类型 | 描述 |
---|---|
It repeats the enclosed block of statements while a Boolean condition is True or until the condition becomes True. It could be terminated at any time with the Exit Do statement. 它重复包含的语句块内布尔条件为 True 或直到条件变为 True 。 它可以随时使用 Exit Do 语句终止。 | |
It repeats a group of statements a specified number of times and a loop index counts the number of loop iterations as the loop executes. 它重复指定次数的一组语句,循环索引计算循环执行时的循环迭代数。 | |
It repeats a group of statements for each element in a collection. This loop is used for accessing and manipulating all elements in an array or a VB.Net collection. 它为集合中的每个元素重复一组语句。 这个循环用于访问和操作数组或 VB.Net 集合中的所有元素。 | |
It executes a series of statements as long as a given condition is True. 只要给定条件为 True ,它就执行一系列语句。 | |
It is not exactly a looping construct. It executes a series of statements that repeatedly refer to a single object or structure. 它不是一个循环结构。 它执行一系列重复引用单个对象或结构的语句。 | |
You can use one or more loops inside any another While, For or Do loop. 您可以在任何其他 While ,For 或 Do 循环中使用一个或多个循环。 |
循环控制语句从其正常序列改变执行。 当执行离开作用域时,在该作用域中创建的所有自动对象都将被销毁。
VB.Net 提供以下控制语句。 单击以下链接以检查其详细信息。
控制语句 | 描述 |
---|---|
Terminates the loop or select case statement and transfers execution to the statement immediately following the loop or select case. 终止循环或选择大小写语句,并将执行转移到循环或选择大小之后的语句。 | |
Causes the loop to skip the remainder of its body and immediately retest its condition prior to reiterating. 导致循环跳过其本身的其余部分,并在重复之前立即重新测试其状态。 | |
Transfers control to the labeled statement. Though it is not advised to use GoTo statement in your program. 将控制转移到带标签的语句。 虽然不建议在程序中使用 |
在VB.Net中,可以使用字符串作为字符数组,但是更常见的做法是使用String关键字声明一个字符串变量。 string关键字是System.String类的别名。
您可以使用以下方法之一创建字符串对象:
By assigning a string literal to a String variable 通过指定一个字符串给一个字符串变量
By using a String class constructor 通过使用String类构造函数
By using the string concatenation operator (+) 通过使用字符串连接运算符(+)
By retrieving a property or calling a method that returns a string 通过检索属性或调用返回字符串的方法
By calling a formatting method to convert a value or object to its string representation
通过调用格式化方法将值或对象转换为其字符串表示形式
下面的例子说明了这一点:
Module strings Sub Main() Dim fname, lname, fullname, greetings As String fname = "Rowan" lname = "Atkinson" fullname = fname + " " + lname Console.WriteLine("Full Name: {0}", fullname) 'by using string constructor Dim letters As Char() = {"H", "e", "l", "l", "o"} greetings = New String(letters) Console.WriteLine("Greetings: {0}", greetings) 'methods returning String Dim sarray() As String = {"Hello", "From", "Tutorials", "Point"} Dim message As String = String.Join(" ", sarray) Console.WriteLine("Message: {0}", message) 'formatting method to convert a value Dim waiting As DateTime = New DateTime(2012, 12, 12, 17, 58, 1) Dim chat As String = String.Format("Message sent at {0:t} on {0:D}", waiting) Console.WriteLine("Message: {0}", chat) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Full Name: Rowan AtkinsonGreetings: HelloMessage: Hello From Tutorials PointMessage: Message sent at 5:58 PM on Wednesday, December 12, 2012
String类有以下两个属性:
SN | 属性名称和说明 |
---|---|
1 | Chars 获取当前String对象中指定位置的Char对象。 |
2 | Length 获取当前String对象中的字符数。 |
String类有许多方法可以帮助你处理字符串对象。 下表提供了一些最常用的方法:
SN | 方法名称和说明 |
---|---|
1 | Public Shared Function Compare ( strA As String, strB As String ) As Integer 比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。 |
2 | Public Shared Function Compare ( strA As String, strB As String, ignoreCase As Boolean ) As Integer 比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。 但是,如果布尔参数为true,它将忽略大小写。 |
3 | Public Shared Function Concat ( str0 As String, str1 As String ) As String 连接两个字符串对象。 |
4 | Public Shared Function Concat ( str0 As String, str1 As String, str2 As String ) As String 连接三个字符串对象。 |
5 | Public Shared Function Concat ( str0 As String, str1 As String, str2 As String, str3 As String ) As String公共共享函数Concat(str0 As String,str1 As String,str2 As String,str3 As String)As String 连接四个字符串对象。 |
6 | Public Function Contains ( value As String ) As Boolean 返回一个值,指示指定的字符串对象是否出现在此字符串中。 |
7 | Public Shared Function Copy ( str As String ) As String 创建与指定字符串具有相同值的新String对象。 |
8 | pPublic Sub CopyTo ( sourceIndex As Integer, destination As Char(), destinationIndex As Integer, count As Integer ) 将指定数量的字符从字符串对象的指定位置复制到Unicode字符数组中的指定位置。 |
9 | Public Function EndsWith ( value As String ) As Boolean 确定字符串对象的结尾是否与指定的字符串匹配。 |
10 | Public Function Equals ( value As String ) As Boolean 确定当前字符串对象,并指定字符串对象是否具有相同的值。 |
11 | Public Shared Function Equals ( a As String, b As String ) As Boolean 确定两个指定字符串对象是否具有相同的值。 |
12 | Public Shared Function Format ( format As String, arg0 As Object ) As String 将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式。 |
13 | Public Function IndexOf ( value As Char ) As Integer 返回当前字符串中指定Unicode字符第一次出现的从零开始的索引。 |
14 | Public Function IndexOf ( value As String ) As Integer 返回此实例中指定字符串第一次出现的从零开始的索引。 |
15 | Public Function IndexOf ( value As Char, startIndex As Integer ) As Integer 返回此字符串中指定Unicode字符第一次出现的从零开始的索引,从指定的字符位置开始搜索。 |
16 | Public Function IndexOf ( value As String, startIndex As Integer ) As Integer 返回此实例中指定字符串第一次出现的从零开始的索引,开始在指定的字符位置搜索。 |
17 | Public Function IndexOfAny ( anyOf As Char() ) As Integer 返回在指定的Unicode字符数组中的任何字符的此实例中第一次出现的从零开始的索引。 |
18 | Public Function IndexOfAny ( anyOf As Char(), startIndex As Integer ) As Integer 返回在指定的Unicode字符数组中的任意字符的此实例中第一次出现的从零开始的索引,开始在指定的字符位置搜索。 |
19 | Public Function Insert ( startIndex As Integer, value As String ) As String 返回一个新字符串,其中指定的字符串插入到当前字符串对象中指定的索引位置。 |
20 | Public Shared Function IsNullOrEmpty ( value As String ) As Boolean 指示指定的字符串是空还是空字符串。 |
21 | Public Shared Function Join ( separator As String, ParamArray value As String() ) As String 连接字符串数组的所有元素,使用每个元素之间指定的分隔符。 |
22 | Public Shared Function Join ( separator As String, value As String(), startIndex As Integer, count As Integer ) As String 使用每个元素之间指定的分隔符连接字符串数组的指定元素。 |
23 | Public Function LastIndexOf ( value As Char ) As Integer 返回当前字符串对象中指定Unicode字符的最后一次出现的从零开始的索引位置。 |
24 | Public Function LastIndexOf ( value As String ) As Integer 返回当前字符串对象中指定字符串的最后一次出现的从零开始的索引位置。 |
25 | Public Function Remove ( startIndex As Integer )As String 删除当前实例中的所有字符,从指定位置开始,并继续到最后一个位置,并返回字符串。 |
26 | Public Function Remove ( startIndex As Integer, count As Integer ) As String 从指定位置开始删除当前字符串中指定数量的字符,并返回字符串。 |
27 | Public Function Replace ( oldChar As Char, newChar As Char ) As String 用指定的Unicode字符替换当前字符串对象中指定Unicode字符的所有出现,并返回新字符串。 |
28 | Public Function Replace ( oldValue As String, newValue As String ) As String 将当前字符串对象中指定字符串的所有出现替换为指定的字符串,并返回新字符串。 |
29 | Public Function Split ( ParamArray separator As Char() ) As String() 返回一个字符串数组,其中包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。 |
30 | Public Function Split ( separator As Char(), count As Integer ) As String() 返回一个字符串数组,其中包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。 int参数指定要返回的子字符串的最大数目。 |
31 | Public Function StartsWith ( value As String ) As Boolean 确定此字符串实例的开头是否与指定的字符串匹配。 |
32 | Public Function ToCharArray As Char() 返回包含当前字符串对象中所有字符的Unicode字符数组。 |
33 | Public Function ToCharArray ( startIndex As Integer, length As Integer ) As Char() 返回一个Unicode字符数组,其中包含当前字符串对象中的所有字符,从指定的索引开始,直到指定的长度。 |
34 | Public Function ToLower As String 返回此字符串的转换为小写的副本。 |
35 | Public Function ToUpper As String 返回此字符串的转换为大写的副本。 |
36 | Public Function Trim As String 从当前String对象中删除所有前导和尾部空格字符。 |
上面列出的方法并不详尽,请访问MSDN库获取完整的方法列表和String类构造函数。
下面的例子说明了上述一些方法:
比较字符串:
Module strings Sub Main() Dim str1, str2 As String str1 = "This is test" str2 = "This is text" If (String.Compare(str1, str2) = 0) Then Console.WriteLine(str1 + " and " + str2 + " are equal.") Else Console.WriteLine(str1 + " and " + str2 + " are not equal.") End If Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
This is test and This is text are not equal.
字符串包含字符串:
Module strings Sub Main() Dim str1 As String str1 = "This is test" If (str1.Contains("test")) Then Console.WriteLine("The sequence 'test' was found.") End If Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The sequence 'test' was found.
获取的子字符串:
Module strings Sub Main() Dim str As String str = "Last night I dreamt of San Pedro" Console.WriteLine(str) Dim substr As String = str.Substring(23) Console.WriteLine(substr) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Last night I dreamt of San PedroSan Pedro.
加入字符串:
Module strings Sub Main() Dim strarray As String() = {"Down the way where the nights are gay", "And the sun shines daily on the mountain top", "I took a trip on a sailing ship", "And when I reached Jamaica", "I made a stop"} Dim str As String = String.Join(vbCrLf, strarray) Console.WriteLine(str) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Down the way where the nights are gayAnd the sun shines daily on the mountain topI took a trip on a sailing shipAnd when I reached JamaicaI made a stop
你写的大部分软件都需要实现某种形式的日期功能,返回当前日期和时间。日期是日常生活的一部分,使用它能让工作变得轻松,不需要太多思考。 VB.Net还提供了强大的日期算术工具,使操作日期变得容易。
日期数据类型包含日期值,时间值或日期和时间值。 Date的默认值为0001年1月1日的0:00:00(午夜)。等效的.NET数据类型为System.DateTime。
DateTime 结构表示即时时间,通常表示为日期和时间的一天
'Declaration<SerializableAttribute> _Public Structure DateTime _ Implements IComparable, IFormattable, IConvertible, ISerializable, IComparable(Of DateTime), IEquatable(Of DateTime)
您还可以从DateAndTime类获取当前日期和时间。
DateAndTime模块包含日期和时间操作中使用的过程和属性。
'Declaration<StandardModuleAttribute> _Public NotInheritable Class DateAndTime
注意: DateTime结构和DateAndTime模块都包含诸如Now和Today之类的属性,因此初学者经常会感到困惑。 DateAndTime类属于Microsoft.VisualBasic命名空间,DateTime结构属于System命名空间。
|
下表列出了一些DateTime结构的常用属性 :
S.N | 属性 | 描述 |
---|---|---|
1 | Date | Gets the date component of this instance. 获取此实例的日期组件。 |
2 | Day | Gets the day of the month represented by this instance. 获取此实例所代表的月份中的某一天。 |
3 | DayOfWeek | Gets the day of the week represented by this instance. 获取此实例表示的星期几。 |
4 | DayOfYear | Gets the day of the year represented by this instance. 获取此实例表示的一年中的某一天。 |
5 | Hour | Gets the hour component of the date represented by this instance. 获取此实例表示的日期的小时组件。 |
6 | Kind | Gets a value that indicates whether the time represented by this instance is based on local time, Coordinated Universal Time (UTC), or neither.G 获取一个值,该值指示此实例表示的时间是基于本地时间,协调世界时间(UTC)还是两者都不是。 |
7 | Millisecond | Gets the milliseconds component of the date represented by this instance. 获取此实例表示的日期的毫秒组件。 |
8 | Minute | Gets the minute component of the date represented by this instance. 获取此实例表示的日期的分钟分量。 |
9 | Month | Gets the month component of the date represented by this instance. 获取此实例表示的日期的月份。 |
10 | Now | Gets a DateTime object that is set to the current date and time on this computer, expressed as the local time. 获取在此计算机上设置为当前日期和时间的DateTime对象,以本地时间表示。 |
11 | Second | Gets the seconds component of the date represented by this instance. 获取此实例表示的日期的秒组件。 |
12 | Ticks | Gets the number of ticks that represent the date and time of this instance. 获取表示此实例的日期和时间的刻度数。 |
13 | TimeOfDay | Gets the time of day for this instance. 获取此实例的时间。 |
14 | Today | Gets the current date. 获取当前日期。 |
15 | UtcNow | Gets a DateTime object that is set to the current date and time on this computer, expressed as the Coordinated Universal Time (UTC). 获取设置为此计算机上当前日期和时间的DateTime对象,以协调世界时(UTC)表示。 |
16 | Year | Gets the year component of the date represented by this instance. 获取此实例表示的日期的年份组件。 |
下表列出了DateTime结构的一些常用方法:
SN | 方法名称和说明 |
---|---|
1 | Public Function Add (value As TimeSpan) As DateTime 返回一个新的DateTime,将指定的TimeSpan的值添加到此实例的值。 |
2 | Public Function AddDays ( value As Double) As DateTime 返回一个新的DateTime,该值将指定的天数添加到此实例的值中。 |
3 | Public Function AddHours (value As Double) As DateTime 返回一个新的DateTime,该值将指定的小时数添加到此实例的值中。 |
4 | Public Function AddMinutes (value As Double) As DateTime 返回一个新的DateTime,将指定的分钟数添加到此实例的值。 |
5 | Public Function AddMonths (months As Integer) As DateTime 返回一个新的DateTime,将指定的月数添加到此实例的值。 |
6 | Public Function AddSeconds (value As Double) As DateTime 返回一个新的DateTime,将指定的秒数添加到此实例的值。 |
7 | Public Function AddYears (value As Integer ) As DateTime 返回一个新的DateTime,将指定的年数添加到此实例的值。 |
8 | Public Shared Function Compare (t1 As DateTime,t2 As DateTime) As Integer 比较两个DateTime实例,并返回一个整数,指示第一个实例是早于,与第二个实例相同还是晚于第二个实例。 |
9 | Public Function CompareTo (value As DateTime) As Integer 将此实例的值与指定的DateTime值进行比较,并返回一个整数,指示此实例是早于,等于还是晚于指定的DateTime值。 |
10 | Public Function Equals (value As DateTime) As Boolean 返回一个值,表示此实例的值是否等于指定的DateTime实例的值。 |
11 | Public Shared Function Equals (t1 As DateTime, t2 As DateTime) As Boolean 返回一个值,指示两个DateTime实例是否具有相同的日期和时间值。 |
12 | Public Overrides Function ToString As String 将当前DateTime对象的值转换为其等效字符串表示形式。 |
以上列出的方法并不详尽,请访问微软的文档以获取DateTime结构的方法和属性的完整列表。
您可以通过以下方式之一创建DateTime对象:
By calling a DateTime constructor from any of the overloaded DateTime constructors.通过从任何重载的DateTime构造函数调用DateTime构造函数。
By assigning the DateTime object a date and time value returned by a property or method.
通过为DateTime对象分配属性或方法返回的日期和时间值。
By parsing the string representation of a date and time value.
通过解析日期和时间值的字符串表示。
By calling the DateTime structure's implicit default constructor.
通过调用DateTime结构的隐式默认构造函数。
下面的例子说明了这一点:
Module Module1 Sub Main() 'DateTime constructor: parameters year, month, day, hour, min, sec Dim date1 As New Date(2012, 12, 16, 12, 0, 0) 'initializes a new DateTime value Dim date2 As Date = #12/16/2012 12:00:52 AM# 'using properties Dim date3 As Date = Date.Now Dim date4 As Date = Date.UtcNow Dim date5 As Date = Date.Today Console.WriteLine(date1) Console.WriteLine(date2) Console.WriteLine(date3) Console.WriteLine(date4) Console.WriteLine(date5) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
12/16/2012 12:00:00 PM12/16/2012 12:00:52 PM12/12/2012 10:22:50 PM12/12/2012 12:00:00 PM
以下程序演示如何获取VB.Net中的当前日期和时间:
当前时间:
Module dateNtime Sub Main() Console.Write("Current Time: ") Console.WriteLine(Now.ToLongTimeString) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Current Time: 11 :05 :32 AM
当前日期:
Module dateNtime Sub Main() Console.WriteLine("Current Date: ") Dim dt As Date = Today Console.WriteLine("Today is: {0}", dt) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Today is: 12/11/2012 12:00:00 AM
Module dateNtime Sub Main() Console.WriteLine("India Wins Freedom: ") Dim independenceDay As New Date(1947, 8, 15, 0, 0, 0) ' Use format specifiers to control the date display. Console.WriteLine(" Format 'd:' " & independenceDay.ToString("d")) Console.WriteLine(" Format 'D:' " & independenceDay.ToString("D")) Console.WriteLine(" Format 't:' " & independenceDay.ToString("t")) Console.WriteLine(" Format 'T:' " & independenceDay.ToString("T")) Console.WriteLine(" Format 'f:' " & independenceDay.ToString("f")) Console.WriteLine(" Format 'F:' " & independenceDay.ToString("F")) Console.WriteLine(" Format 'g:' " & independenceDay.ToString("g")) Console.WriteLine(" Format 'G:' " & independenceDay.ToString("G")) Console.WriteLine(" Format 'M:' " & independenceDay.ToString("M")) Console.WriteLine(" Format 'R:' " & independenceDay.ToString("R")) Console.WriteLine(" Format 'y:' " & independenceDay.ToString("y")) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
India Wins Freedom:Format 'd:' 8/15/1947Format 'D:' Friday, August 15, 1947Format 't:' 12:00 AMFormat 'T:' 12:00:00 AMFormat 'f:' Friday, August 15, 1947 12:00 AMFormat 'F:' Friday, August 15, 1947 12:00:00 AMFormat 'g:' 8/15/1947 12:00 AMFormat 'G:' 8/15/1947 12:00:00 AMFormat 'M:' 8/15/1947 August 15Format 'R:' Fri, 15 August 1947 00:00:00 GMTFormat 'y:' August, 1947
下表列出了预定义的日期和时间格式名称。 可以通过这些名称用作Format函数的样式参数:
格式 | 描述 |
---|---|
General Date, or G | Displays a date and/or time. For example, 1/12/2012 07:07:30 AM 显示日期和/或时间。 例如,1/12/2012 07:07:30 AM。. |
Long Date,Medium Date, or D | Displays a date according to your current culture's long date format. For example, Sunday, December 16,2012. 根据您当前区域的长日期格式显示日期。 例如,2012年12月16日星期日 |
Short Date, or d | Displays a date using your current culture's short date format. For example, 12/12/2012 使用当前区域短日期格式显示日期。 例如,12/12/2012。. |
Long Time,Medium Time, orT | Displays a time using your current culture's long time format; typically includes hours, minutes, seconds. For example, 01:07:30 AM 使用您当前区域的长时间格式显示时间; 通常包括小时,分钟,秒。 例如,01:07:30 AM。. |
Short Time or t | Displays a time using your current culture's short time format. For example, 11:07 AM 使用当前区域的短时格式显示时间。 例如,11:07 AM。. |
f | Displays the long date and short time according to your current culture's format. For example, Sunday, December 16, 2012 12:15 AM 根据您当前的区域格式显示长日期和短时间。 例如,2012年12月16日星期日上午12:15。. |
F | Displays the long date and long time according to your current culture's format. For example, Sunday, December 16, 2012 12:15:31 AM 根据您当前的区域格式显示长日期和长时间。 例如,2012年12月16日星期日12:15:31 AM。. |
g | Displays the short date and short time according to your current culture's format. For example, 12/16/2012 12:15 AM 根据您当前的区域格式显示短日期和短时间。 例如,12/16/2012 12:15 AM。. |
M, m | Displays the month and the day of a date. For example, December 16 显示日期的月份和日期。 例如,12月16日。. |
R, r | Formats the date according to the RFC1123Pattern property 根据RFC1123Pattern属性格式化日期。. |
s | Formats the date and time as a sortable index. For example, 2012-12-16T12:07:31 将日期和时间格式化为可排序索引。 例如,2012-12-16T12:07:31。. |
u | Formats the date and time as a GMT sortable index. For example, 2012-12-16 12:15:31Z 将日期和时间格式设置为GMT可排序索引。 例如,2012-12-16 12:15:31Z。. |
U | Formats the date and time with the long date and long time as GMT. For example, Sunday, December 16, 2012 6:07:31 PM 将日期和时间格式设置为长日期和长时间,格式为GMT。 例如,星期日,2012年12月16日下午6:07:31。. |
Y, y | Formats the date as the year and month. For example, December, 2012 将日期格式设置为年和月。 例如,2012年12月。. |
对于其他格式,如用户定义的格式,请参阅Microsoft文档 。
下表列出了一些DateAndTime类的常用属性 :
SN | 属性 | 描述 |
---|---|---|
1 | Date | Returns or sets a String value representing the current date according to your system. 返回或设置根据系统代表当前日期的字符串值。 |
2 | Now | Returns a Date value containing the current date and time according to your system. 返回一个包含根据系统的当前日期和时间的日期值。 |
3 | TimeOfDay | Returns or sets a Date value containing the current time of day according to your system. 返回或设置根据你的系统包含当天的当前时间的日期值。 |
4 | Timer | Returns a Double value representing the number of seconds elapsed since midnight. 返回表示自午夜起经过的秒数为Double值。 |
5 | TimeString | Returns or sets a String value representing the current time of day according to your system. 返回或设置根据你的系统代表一天的当前时间的字符串值。 |
6 | Today | Gets the current date. 获取当前日期。 |
下表列出了一些DateAndTime类的常用方法 :
SN | 方法名称和说明 |
---|---|
1 | Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime 返回包含已添加指定时间间隔的日期和时间值的Date值。 |
2 | Public Shared Function DateAdd (Interval As String,Number As Double,DateValue As Object ) As DateTime 返回包含已添加指定时间间隔的日期和时间值的Date值。 |
3 | Public Shared Function DateDiff (Interval As DateInterval, Date1 As DateTime, Date2 As DateTime, DayOfWeek As FirstDayOfWeek, WeekOfYear As FirstWeekOfYear ) As Long 返回指定两个日期值之间的时间间隔数的长整型值。 |
4 | Public Shared Function DatePart (Interval As DateInterval, DateValue As DateTime, FirstDayOfWeekValue As FirstDayOfWeek, FirstWeekOfYearValue As FirstWeekOfYear ) As Integer 返回包含给定Date值的指定组件的整数值。 |
5 | Public Shared Function Day (DateValue As DateTime) As Integer 返回从1到31的整数值,表示每月的某一天。 |
6 | Public Shared Function Hour (TimeValue As DateTime) As Integer 公共共享函数Hour (TIMEVALUE为DATETIME)作为整数 返回从0到23的整数值,表示一天中的小时。 |
7 | Public Shared Function Minute (TimeValue As DateTime) As Integer 返回一个从0到59的整数值,表示小时的分钟。 |
8 | Public Shared Function Month (DateValue As DateTime) As Integer 返回从1到12的整数值,表示一年中的月份。 |
9 | Public Shared Function MonthName (Month As Integer, Abbreviate As Boolean) As String 返回包含指定月份的名称的字符串值。 |
10 | Public Shared Function Second (TimeValue As DateTime) As Integer 返回从0到59,代表分钟的第二个整数值。 |
11 | Public Overridable Function ToString As String 返回表示当前对象的字符串。 |
12 | Public Shared Function Weekday (DateValue As DateTime, DayOfWeek As FirstDayOfWeek) As Integer 返回包含表示星期几的一个数的整数值。 |
13 | Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String 返回包含指定工作日名称的字符串值。 |
14 | Public Shared Function Year (DateValue As DateTime) As Integer 返回从1到9999表示年份的整数值。 |
上述名单并不详尽。有关属性和DateAndTime类的方法的完整列表,请参阅Microsoft文档 。
下面的程序演示其中的一些方法:
Module Module1 Sub Main() Dim birthday As Date Dim bday As Integer Dim month As Integer Dim monthname As String ' Assign a date using standard short format. birthday = #7/27/1998# bday = Microsoft.VisualBasic.DateAndTime.Day(birthday) month = Microsoft.VisualBasic.DateAndTime.Month(birthday) monthname = Microsoft.VisualBasic.DateAndTime.MonthName(month) Console.WriteLine(birthday) Console.WriteLine(bday) Console.WriteLine(month) Console.WriteLine(monthname) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
7/27/1998 12:00:00 AM277July
所有数组由连续的内存位置组成。 最低地址对应于第一个元素,最高地址对应于最后一个元素。
要在VB.Net中声明数组,可以使用Dim语句。 例如,
Dim intData(30) ' an array of 31 elementsDim strData(20) As String ' an array of 21 stringsDim twoDarray(10, 20) As Integer 'a two dimensional array of integersDim ranges(10, 100) 'a two dimensional array
您还可以在声明数组时初始化数组元素。 例如,
Dim intData() As Integer = {12, 16, 20, 24, 28, 32}Dim names() As String = {"Karthik", "Sandhya", _"Shivangi", "Ashwitha", "Somnath"}Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}
可以通过使用数组的索引来存储和访问数组中的元素。 以下程序演示了这一点:
Module arrayApl Sub Main() Dim n(10) As Integer ' n is an array of 11 integers ' Dim i, j As Integer ' initialize elements of array n ' For i = 0 To 10 n(i) = i + 100 ' set element at location i to i + 100 Next i ' output each array element's value ' For j = 0 To 10 Console.WriteLine("Element({0}) = {1}", j, n(j)) Next j Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Element(0) = 100Element(1) = 101Element(2) = 102Element(3) = 103Element(4) = 104Element(5) = 105Element(6) = 106Element(7) = 107Element(8) = 108Element(9) = 109Element(10) = 110
ReDim [Preserve] arrayname(subscripts)
Preserve关键字有助于在调整现有数组大小时保留现有数组中的数据。
arrayname是要重新维度的数组的名称。
subscripts指定新维度。
Module arrayApl Sub Main() Dim marks() As Integer ReDim marks(2) marks(0) = 85 marks(1) = 75 marks(2) = 90 ReDim Preserve marks(10) marks(3) = 80 marks(4) = 76 marks(5) = 92 marks(6) = 99 marks(7) = 79 marks(8) = 75 For i = 0 To 10 Console.WriteLine(i & vbTab & marks(i)) Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
0 851 752 903 804 765 926 997 798 759 010 0
VB.Net允许多维数组。多维数组也被称为矩形数组。
你可以声明一个二维的字符串数组:
Dim twoDStringArray(10, 20) As String
或者,整数变量的3维数组:
Dim threeDIntArray(10, 10, 10) As Integer
下面的程序演示创建和使用二维数组:
Module arrayApl Sub Main() ' an array with 5 rows and 2 columns Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}} Dim i, j As Integer ' output each array element's value ' For i = 0 To 4 For j = 0 To 1 Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j)) Next j Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a[0,0]: 0a[0,1]: 0a[1,0]: 1a[1,1]: 2a[2,0]: 2a[2,1]: 4a[3,0]: 3a[3,1]: 6a[4,0]: 4a[4,1]: 8
Jagged数组是一个数组的数组。 以下代码显示了声明一个名为score of Integers的不规则数组:
Dim scores As Integer()() = New Integer(5)(){}
下面的例子说明使用不规则数组:
Module arrayApl Sub Main() 'a jagged array of 5 array of integers Dim a As Integer()() = New Integer(4)() {} a(0) = New Integer() {0, 0} a(1) = New Integer() {1, 2} a(2) = New Integer() {2, 4} a(3) = New Integer() {3, 6} a(4) = New Integer() {4, 8} Dim i, j As Integer ' output each array element's value For i = 0 To 4 For j = 0 To 1 Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j)) Next j Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a[0][0]: 0a[0][1]: 0a[1][0]: 1a[1][1]: 2a[2][0]: 2a[2][1]: 4a[3][0]: 3a[3][1]: 6a[4][0]: 4a[4][1]: 8
Array类是VB.Net中所有数组的基类。 它在系统命名空间中定义。 Array类提供了处理数组的各种属性和方法。
下表提供了一些Array类中最常用的属性 :
SN | 属性名称和说明 |
---|---|
1 | IsFixedSize Gets a value indicating whether the Array has a fixed size. 获取一个值,指示数组是否具有固定大小。 |
2 | IsReadOnly Gets a value indicating whether the Array is read-only. 获取一个值,该值指示Array是否为只读。 |
3 | Length Gets a 32-bit integer that represents the total number of elements in all the dimensions of the Array. 获取一个32位整数,表示数组所有维度中元素的总数。 |
4 | LongLength Gets a 64-bit integer that represents the total number of elements in all the dimensions of the Array. 获取一个64位整数,表示数组所有维度中元素的总数。 |
5 | Rank Gets the rank (number of dimensions) of the Array. 获取数组的排名(维数)。 |
下表提供了一些最常用的Array类方法:
SN | 方法名称和说明 |
---|---|
1 | Public Shared Sub Clear (array As Array, index As Integer, length As Integer) 设置一个范围的数组元素的零,为false,或为空,这取决于元素类型。 |
2 | Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer) 复制一定范围内由数组以第一个元素的元素,并将它们粘贴到起始于第一个元素另一个数组。长度被指定为32位整数。 |
3 | Public Sub CopyTo (array As Array, index As Integer) 将当前的一维数组到指定的一维数组从指定的目标数组索引处的所有元素。索引被指定为32位整数。 |
4 | Public Function GetLength (dimension As Integer) As Integer 获取一个32位整数,它表示数组的指定维中的元素的数量。 |
5 | Public Function GetLongLength (dimension As Integer) As Long 获取一个64位整数,它代表了数组的指定维中的元素的数量。 |
6 | Public Function GetLowerBound (dimension As Integer) As Integer 获取下界在数组中指定的尺寸。 |
7 | Public Function GetType As Type 获取当前实例的类型(从Object继承)。 |
8 | Public Function GetUpperBound (dimension As Integer) As Integer 获取上限在数组中指定的尺寸。 |
9 | Public Function GetValue (index As Integer) As Object 获取在一维数组中指定位置的值。索引被指定为32位整数。 |
10 | Public Shared Function IndexOf (array As Array,value As Object) As Integer 搜索指定的对象,并返回第一次出现的整个一维数组中的索引。 |
11 | Public Shared Sub Reverse (array As Array) 反转在整个一维数组中的元素的顺序。 |
12 | Public Sub SetValue (value As Object, index As Integer) 在一维阵列中的指定位置设置一个值的元素。索引被指定为32位整数。 |
13 | Public Shared Sub Sort (array As Array) 使用排序了IComparable实现阵列中的每个元素在整个一维数组中的元素。 |
14 | Public Overridable Function ToString As String 返回表示当前对象(从Object继承)的字符串。 |
有关Array类属性和方法的完整列表,请参阅Microsoft文档。
下面的程序演示使用的一些Array类的方法:
Module arrayApl Sub Main() Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10} Dim temp As Integer() = list Dim i As Integer Console.Write("Original Array: ") For Each i In list Console.Write("{0} ", i) Next i Console.WriteLine() ' reverse the array Array.Reverse(temp) Console.Write("Reversed Array: ") For Each i In temp Console.Write("{0} ", i) Next i Console.WriteLine() 'sort the array Array.Sort(list) Console.Write("Sorted Array: ") For Each i In list Console.Write("{0} ", i) Next i Console.WriteLine() Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Original Array: 34 72 13 44 25 30 10Reversed Array: 10 30 25 44 13 72 34Sorted Array: 10 13 25 30 34 44 72
集合类是用于数据存储和检索的专用类。 这些类提供对堆栈,队列,列表和哈希表的支持。 大多数集合类实现相同的接口。
集合类用于各种目的,例如动态地为元素分配内存以及基于索引访问项目列表等。这些类创建Object类的对象集合,Object类是VB中所有数据类型的基类 。
以下是System.Collection命名空间的各种常用类。 单击以下链接以检查其详细信息。
Class | Description and Useage |
---|---|
It represents ordered collection of an object that can be indexedindividually. 它表示可以单独索引的对象的有序集合。 It is basically an alternative to an array. However, unlike array, you can add and remove items from a list at a specified position using anindex and the array resizes itself automatically. It also allows dynamic memory allocation, add, search and sort items in the list. 它基本上是一个数组的替代。 但是,与数组不同,您可以使用索引在指定位置从列表中添加和删除项目,并且数组会自动调整大小。 它还允许动态内存分配,添加,搜索和排序列表中的项目。 | |
It uses a key to access the elements in the collection. 它使用一个键来访问集合中的元素。 A hash table is used when you need to access elements by using key, and you can identify a useful key value. Each item in the hash table has a key/value pair. The key is used to access the items in the collection. 当您需要通过使用键访问元素时使用散列表,您可以标识有用的键值。 散列表中的每个项都有一个键/值对。 该键用于访问集合中的项目。 | |
It uses a key as well as an index to access the items in a list. 它使用一个密钥以及索引来访问列表中的项目。 A sorted list is a combination of an array and a hash table. It contains a list of items that can be accessed using a key or an index. If you access items using an index, it is an ArrayList, and if you access items using a key, it is a Hashtable. The collection of items is always sorted by the key value. 排序的列表是数组和哈希表的组合。它包含可以使用的键或索引访问的项的列表。如果您访问使用索引的项目,它是一个 ArrayList,和如果你访问项目使用一把钥匙,它是一个哈希表。项的集合总是按关键值排序的。 | |
It represents a last-in, first out collection of object. 它表示对象的后进先出的集合。 It is used when you need a last-in, first-out access of items. When you add an item in the list, it is called pushing the item, and when you remove it, it is calledpopping the item. 当您需要项目的最后进入,首先访问时使用。 当您在列表中添加项目时,称为推送项目,当您删除它时,它被称为弹出项目。 | |
It represents a first-in, first out collection of object. 它表示对象的先进先出集合。 It is used when you need a first-in, first-out access of items. When you add an item in the list, it is called enqueue, and when you remove an item, it is called deque. 当您需要项目的先进先出访问时使用。 当您在列表中添加项目时,它被称为enqueue,当您删除项目时,称为deque。 | |
It represents an array of the binary representation using the values 1 and 0. 它表示使用值1和0的二进制表示的数组。 It is used when you need to store the bits but do not know the number of bits in advance. You can access items from the BitArray collection by using an integer index, which starts from zero. 它用于需要存储位但不提前知道位数。 您可以通过使用从零开始的整数索引来访问BitArray集合中的项目。 |
过程是一组调用时一起执行任务的语句。执行该过程之后,控制返回到调用过程的语句。 VB.Net有两种类型的程序:
Functions
Sub procedures or Subs
函数返回一个值,而Subs不返回值。
函数语句用于声明函数的名称,参数和主体。 函数语句的语法是:
[Modifiers] Function FunctionName [(ParameterList)] As ReturnType [Statements]End Function
Modifiers 修饰符 :指定函数的访问级别;可能的值有:公共,私有,保护,朋友,关于保护超载,重载,共享和阴影朋友和信息。
FunctionName:表示该函数的名称
ParameterList 参数列表 :指定参数的列表
ReturnType 返回类型 :指定变量的函数返回的数据类型
以下代码片段显示了一个函数FindMax,它接受两个整数值,并返回两个较大者。
Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num1 > num2) Then result = num1 Else result = num2 End If FindMax = resultEnd Function
在VB.Net中,函数可以通过两种方式向调用代码返回一个值:
通过使用return语句
通过将值分配给函数名
下面的例子演示了如何使用FindMax函数:
Module myfunctions Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num1 > num2) Then result = num1 Else result = num2 End If FindMax = result End Function Sub Main() Dim a As Integer = 100 Dim b As Integer = 200 Dim res As Integer res = FindMax(a, b) Console.WriteLine("Max value is : {0}", res) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Max value is : 200
一个函数可以调用自身。 这被称为递归。 以下是使用递归函数计算给定数字的阶乘的示例:
Module myfunctions Function factorial(ByVal num As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num = 1) Then Return 1 Else result = factorial(num - 1) * num Return result End If End Function Sub Main() 'calling the factorial method Console.WriteLine("Factorial of 6 is : {0}", factorial(6)) Console.WriteLine("Factorial of 7 is : {0}", factorial(7)) Console.WriteLine("Factorial of 8 is : {0}", factorial(8)) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Factorial of 6 is: 720Factorial of 7 is: 5040Factorial of 8 is: 40320
Module myparamfunc Function AddElements(ParamArray arr As Integer()) As Integer Dim sum As Integer = 0 Dim i As Integer = 0 For Each i In arr sum += i Next i Return sum End Function Sub Main() Dim sum As Integer sum = AddElements(512, 720, 250, 567, 889) Console.WriteLine("The sum is: {0}", sum) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The sum is: 2938
您可以在VB.Net中将数组作为函数参数传递。 以下示例演示了这一点:
Module arrayParameter Function getAverage(ByVal arr As Integer(), ByVal size As Integer) As Double 'local variables Dim i As Integer Dim avg As Double Dim sum As Integer = 0 For i = 0 To size - 1 sum += arr(i) Next i avg = sum / size Return avg End Function Sub Main() ' an int array with 5 elements ' Dim balance As Integer() = {1000, 2, 3, 17, 50} Dim avg As Double 'pass pointer to the array as an argument avg = getAverage(balance, 5) ' output the returned value ' Console.WriteLine("Average value is: {0} ", avg) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Average value is: 214.4
正如我们在上一章中提到的,Sub过程是不返回任何值的过程。 我们在所有的例子中一直使用Sub过程Main。 到目前为止,我们已经在这些教程中编写控制台应用程序。 当这些应用程序开始时,控制转到主子程序,它反过来运行构成程序主体的任何其他语句。
Sub语句用于声明子过程的名称,参数和主体。 Sub语句的语法是:
[Modifiers] Sub SubName [(ParameterList)] [Statements]End Sub
Modifiers 修饰符 :指定过程的访问级别;可能的值有:Public, Private, Protected, Friend, Protected Friend and information regarding overloading, overriding, sharing, and shadowing.
SubName 子名 :表示该子的名字
ParameterList 参数列表 :指定参数的列表
Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal) 'local variable declaration Dim pay As Double pay = hours * wage Console.WriteLine("Total Pay: {0:C}", pay) End Sub Sub Main() 'calling the CalculatePay Sub Procedure CalculatePay(25, 10) CalculatePay(40, 20) CalculatePay(30, 27.5) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Total Pay: $250.00Total Pay: $800.00Total Pay: $825.00
这是将参数传递给方法的默认机制。 在这种机制中,当调用方法时,为每个值参数创建一个新的存储位置。 实际参数的值被复制到它们中。 因此,对方法中的参数所做的更改对参数没有影响。
在VB.Net中,可以使用ByVal关键字声明引用参数。 下面的例子演示了这个概念:
Module paramByval Sub swap(ByVal x As Integer, ByVal y As Integer) Dim temp As Integer temp = x ' save the value of x x = y ' put y into x y = temp 'put temp into y End Sub Sub Main() ' local variable definition Dim a As Integer = 100 Dim b As Integer = 200 Console.WriteLine("Before swap, value of a : {0}", a) Console.WriteLine("Before swap, value of b : {0}", b) ' calling a function to swap the values ' swap(a, b) Console.WriteLine("After swap, value of a : {0}", a) Console.WriteLine("After swap, value of b : {0}", b) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Before swap, value of a :100Before swap, value of b :200After swap, value of a :100After swap, value of b :200
它表明,虽然它们在函数内部已更改,但值中没有变化。
引用参数是对变量的存储器位置的引用。 当您通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。 参考参数表示与提供给该方法的实际参数相同的存储器位置。
在VB.Net中,可以使用ByRef关键字声明引用参数。 以下示例演示了这一点:
Module paramByref Sub swap(ByRef x As Integer, ByRef y As Integer) Dim temp As Integer temp = x ' save the value of x x = y ' put y into x y = temp 'put temp into y End Sub Sub Main() ' local variable definition Dim a As Integer = 100 Dim b As Integer = 200 Console.WriteLine("Before swap, value of a : {0}", a) Console.WriteLine("Before swap, value of b : {0}", b) ' calling a function to swap the values ' swap(a, b) Console.WriteLine("After swap, value of a : {0}", a) Console.WriteLine("After swap, value of b : {0}", b) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Before swap, value of a : 100Before swap, value of b : 200After swap, value of a : 200After swap, value of b : 100
类的定义以关键字Class开头,后跟类名称; 和类体,由End Class语句结束。 以下是类定义的一般形式:
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _Class name [ ( Of typelist ) ] [ Inherits classname ] [ Implements interfacenames ] [ statements ]End Class
attributelist 属性列表:is a list of attributes that apply to the class. Optional. attributelist是一个适用于类的属性列表。 可选的。
accessmodifier 访问修改器:defines the access levels of the class, it has values as - Public, Protected, Friend, Protected Friend and Private. Optional. accessmodifier定义类的访问级别,它的值为 - Public,Protected,Friend,Protected Friend和Private。 可选的。
Shadows 阴影:indicate that the variable re-declares and hides an identically named element, or set of overloaded elements, in a base class. Optional. 阴影表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。 可选的。
MustInherit:specifies that the class can be used only as a base class and that you cannot create an object directly from it, i.e., an abstract class. Optional. MustInherit指定该类只能用作基类,并且不能直接从它创建对象,即抽象类。 可选的。
NotInheritable 不可继承:specifies that the class cannot be used as a base class. NotInheritable指定该类不能用作基类。
Partial 部分:indicates a partial definition of the class. Partial表示类的部分定义。
Inherits 继承:specifies the base class it is inheriting from. Inherits指定它继承的基类。
Implements 实现:specifies the interfaces the class is inheriting from. Implements指定类继承的接口。
下面的示例演示了一个Box类,它有三个数据成员,长度,宽度和高度:
Module mybox Class Box Public length As Double ' Length of a box Public breadth As Double ' Breadth of a box Public height As Double ' Height of a box End Class Sub Main() Dim Box1 As Box = New Box() ' Declare Box1 of type Box Dim Box2 As Box = New Box() ' Declare Box2 of type Box Dim volume As Double = 0.0 ' Store the volume of a box here ' box 1 specification Box1.height = 5.0 Box1.length = 6.0 Box1.breadth = 7.0 ' box 2 specification Box2.height = 10.0 Box2.length = 12.0 Box2.breadth = 13.0 'volume of box 1 volume = Box1.height * Box1.length * Box1.breadth Console.WriteLine("Volume of Box1 : {0}", volume) 'volume of box 2 volume = Box2.height * Box2.length * Box2.breadth Console.WriteLine("Volume of Box2 : {0}", volume) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Volume of Box1 : 210Volume of Box2 : 1560
Module mybox Class Box Public length As Double ' Length of a box Public breadth As Double ' Breadth of a box Public height As Double ' Height of a box Public Sub setLength(ByVal len As Double) length = len End Sub Public Sub setBreadth(ByVal bre As Double) breadth = bre End Sub Public Sub setHeight(ByVal hei As Double) height = hei End Sub Public Function getVolume() As Double Return length * breadth * height End Function End Class Sub Main() Dim Box1 As Box = New Box() ' Declare Box1 of type Box Dim Box2 As Box = New Box() ' Declare Box2 of type Box Dim volume As Double = 0.0 ' Store the volume of a box here ' box 1 specification Box1.setLength(6.0) Box1.setBreadth(7.0) Box1.setHeight(5.0) 'box 2 specification Box2.setLength(12.0) Box2.setBreadth(13.0) Box2.setHeight(10.0) ' volume of box 1 volume = Box1.getVolume() Console.WriteLine("Volume of Box1 : {0}", volume) 'volume of box 2 volume = Box2.getVolume() Console.WriteLine("Volume of Box2 : {0}", volume) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Volume of Box1 : 210Volume of Box2 : 1560
Class Line Private length As Double ' Length of a line Public Sub New() 'constructor Console.WriteLine("Object is being created") End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line() 'set line length line.setLength(6.0) Console.WriteLine("Length of line : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being createdLength of line : 6
默认构造函数没有任何参数,但如果需要,构造函数可以有参数。 这样的构造函数称为参数化构造函数。 此技术可帮助您在创建对象时为其分配初始值,如以下示例所示:
Class Line Private length As Double ' Length of a line Public Sub New(ByVal len As Double) 'parameterised constructor Console.WriteLine("Object is being created, length = {0}", len) length = len End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line(10.0) Console.WriteLine("Length of line set by constructor : {0}", line.getLength()) 'set line length line.setLength(6.0) Console.WriteLine("Length of line set by setLength : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being created, length = 10Length of line set by constructor : 10Length of line set by setLength : 6
析构函数是一个类的特殊成员Sub,只要它的类的对象超出范围,它就被执行。
Class Line Private length As Double ' Length of a line Public Sub New() 'parameterised constructor Console.WriteLine("Object is being created") End Sub Protected Overrides Sub Finalize() ' destructor Console.WriteLine("Object is being deleted") End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line() 'set line length line.setLength(6.0) Console.WriteLine("Length of line : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being createdLength of line : 6Object is being deleted
Class StaticVar Public Shared num As Integer Public Sub count() num = num + 1 End Sub Public Shared Function getNum() As Integer Return num End Function Shared Sub Main() Dim s As StaticVar = New StaticVar() s.count() s.count() s.count() Console.WriteLine("Value of variable num: {0}", StaticVar.getNum()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Value of variable num: 3
<access-specifier> Class <base_class>...End ClassClass <derived_class>: Inherits <base_class>...End Class
考虑一个基类Shape和它的派生类Rectangle:
' Base classClass Shape Protected width As Integer Protected height As Integer Public Sub setWidth(ByVal w As Integer) width = w End Sub Public Sub setHeight(ByVal h As Integer) height = h End SubEnd Class' Derived classClass Rectangle : Inherits Shape Public Function getArea() As Integer Return (width * height) End FunctionEnd ClassClass RectangleTester Shared Sub Main() Dim rect As Rectangle = New Rectangle() rect.setWidth(5) rect.setHeight(7) ' Print the area of the object. Console.WriteLine("Total area: {0}", rect.getArea()) Console.ReadKey() End Sub End Class
当上述代码被编译和执行时,它产生了以下结果:
Total area: 35
' Base classClass Rectangle Protected width As Double Protected length As Double Public Sub New(ByVal l As Double, ByVal w As Double) length = l width = w End Sub Public Function GetArea() As Double Return (width * length) End Function Public Overridable Sub Display() Console.WriteLine("Length: {0}", length) Console.WriteLine("Width: {0}", width) Console.WriteLine("Area: {0}", GetArea()) End Sub 'end class Rectangle End Class'Derived classClass Tabletop : Inherits Rectangle Private cost As Double Public Sub New(ByVal l As Double, ByVal w As Double) MyBase.New(l, w) End Sub Public Function GetCost() As Double Dim cost As Double cost = GetArea() * 70 Return cost End Function Public Overrides Sub Display() MyBase.Display() Console.WriteLine("Cost: {0}", GetCost()) End Sub 'end class TabletopEnd ClassClass RectangleTester Shared Sub Main() Dim t As Tabletop = New Tabletop(4.5, 7.5) t.Display() Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Length: 4.5Width: 7.5Area: 33.75Cost: 2362.5
VB.Net支持多重继承。
异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。 VB.Net异常处理建立在四个关键字:Try,Catch,Finally和Throw。
Try: A Try block identifies a block of code for which particular exceptions will be activated. It's followed by one or more Catch blocks. Try块标识将激活特定异常的代码块。 它后面是一个或多个Catch块。
Catch: A program catches an exception with an exception handler at the place in a program where you want to handle the problem. The Catch keyword indicates the catching of an exception. 程序捕获异常,并在程序中要处理问题的位置使用异常处理程序。 Catch关键字表示捕获异常。
Finally: The Finally block is used to execute a given set of statements, whether an exception is thrown or not thrown. For example, if you open a file, it must be closed whether an exception is raised or not. 最后:Finally块用于执行给定的一组语句,无论是抛出还是不抛出异常。 例如,如果打开一个文件,那么无论是否引发异常,都必须关闭该文件。
Throw: A program throws an exception when a problem shows up. This is done using a Throw keyword. 当出现问题时,程序抛出异常。 这是使用Throw关键字完成的。
假设块将引发异常,则方法使用Try和Catch关键字的组合捕获异常。 Try / Catch块放置在可能生成异常的代码周围。 Try / Catch块中的代码称为受保护代码,使用Try / Catch的语法如下所示:
Try [ tryStatements ] [ Exit Try ][ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ][ Catch ... ][ Finally [ finallyStatements ] ]End Try
您可以列出多个catch语句以捕获不同类型的异常,以防您的try块在不同情况下引发多个异常。
在.Net框架中,异常由类表示。 .Net Framework中的异常类主要直接或间接从System.Exception类派生。 从System.Exception类派生的一些异常类是System.ApplicationException和System.SystemException类。
System.ApplicationException类支持由应用程序生成的异常。 所以程序员定义的异常应该从这个类派生。
System.SystemException类是所有预定义系统异常的基类。
下表提供了从Sytem.SystemException类派生的一些预定义异常类:
异常类 | 描述 |
---|---|
System.IO.IOException | Handles I/O errors. 处理I / O错误。 |
System.IndexOutOfRangeException | Handles errors generated when a method refers to an array index out of range. 当处理的方法是指一个数组索引超出范围产生的错误。 |
System.ArrayTypeMismatchException | Handles errors generated when type is mismatched with the array type 处理类型与数组类型不匹配时生成的错误。. |
System.NullReferenceException | Handles errors generated from deferencing a null object. 处理从取消引用空对象生成的错误。 |
System.DivideByZeroException | Handles errors generated from dividing a dividend with zero. 处理将股利除以零所产生的错误。 |
System.InvalidCastException | Handles errors generated during typecasting. 处理类型转换期间生成的错误。 |
为System.OutOfMemoryException | Handles errors generated from insufficient free memory. 处理来自可用内存不足产生的错误。 |
System.StackOverflowException | Handles errors generated from stack overflow. 处理来自堆栈溢出产生的错误。 |
VB.Net提供了一个结构化的解决方案,以try和catch块的形式处理异常处理问题。 使用这些块,核心程序语句与错误处理语句分离。
Module exceptionProg Sub division(ByVal num1 As Integer, ByVal num2 As Integer) Dim result As Integer Try result = num1 num2 Catch e As DivideByZeroException Console.WriteLine("Exception caught: {0}", e) Finally Console.WriteLine("Result: {0}", result) End Try End Sub Sub Main() division(25, 0) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ...Result: 0
您还可以定义自己的异常。 用户定义的异常类派生自ApplicationException类。 以下示例演示了这一点:
Module exceptionProg Public Class TempIsZeroException : Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Public Class Temperature Dim temperature As Integer = 0 Sub showTemp() If (temperature = 0) Then Throw (New TempIsZeroException("Zero Temperature found")) Else Console.WriteLine("Temperature: {0}", temperature) End If End Sub End Class Sub Main() Dim temp As Temperature = New Temperature() Try temp.showTemp() Catch e As TempIsZeroException Console.WriteLine("TempIsZeroException: {0}", e.Message) End Try Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
TempIsZeroException: Zero Temperature found
Throw [ expression ]
下面的程序说明了这一点:
Module exceptionProg Sub Main() Try Throw New ApplicationException("A custom exception _ is being thrown here...") Catch e As Exception Console.WriteLine(e.Message) Finally Console.WriteLine("Now inside the Finally Block") End Try Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
A custom exception is being thrown here...Now inside the Finally Block
Afileis是存储在具有特定名称和目录路径的磁盘中的数据的集合。 当打开文件进行读取或写入时,它变为astream。
System.IO命名空间具有用于对文件执行各种操作的各种类,例如创建和删除文件,读取或写入文件,关闭文件等。
I / O类 | 描述 |
---|---|
BinaryReader | 读取二进制流的基本数据。 |
BinaryWriter | 以二进制格式写入原始数据。 |
BufferedStream | 对于字节流的临时存储。 |
Directory | 有助于操纵的目录结构。 |
DirectoryInfo | 用于对目录进行操作。 |
DriveInfo | 提供了驱动器的信息。 |
File | 有助于处理文件。 |
FileInfo | 用于对文件执行操作。 |
FileStream | 用于读,写在文件中的任何位置。 |
MemoryStream | 用于存储在存储器流传输数据的随机访问。 |
Path | 在执行路径信息的操作。 |
StreamReader | 用于从字节流读取字符。 |
StreamWriter | 用于写入字符流。 |
StringReader | 用于从字符串缓冲区中读取。 |
StringWriter | 用于写入字符串缓冲区。 |
Dim <object_name> As FileStream = New FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>)
例如,为创建FileStream对象读取文件namedsample.txt:
Dim f1 As FileStream = New FileStream("sample.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
参数 | 描述 |
---|---|
FileMode | FileModeenumerator定义了打开文件的各种方法。 FileMode枚举器的成员是:
|
FileAccess | FileAccessenumerators有成员:Read,ReadWriteandWrite。 |
FileShare | FileShareenumerators有以下成员:
|
下面的程序演示使用FileStream类:
Imports System.IOModule fileProg Sub Main() Dim f1 As FileStream = New FileStream("sample.txt", _ FileMode.OpenOrCreate, FileAccess.ReadWrite) Dim i As Integer For i = 0 To 20 f1.WriteByte(CByte(i)) Next i f1.Position = 0 For i = 0 To 20 Console.Write("{0} ", f1.ReadByte()) Next i f1.Close() Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1
我们将讨论这些类以及它们在以下部分中执行的操作。 请点击提供的链接以获取各个部分:
主题和说明 |
---|
Reading from and Writing into Text files It involves reading from and writing into text files. TheStreamReaderandStreamWriterclasses help to accomplish it. 它涉及从文本文件读取和写入。 TheStreamReaderandStreamWriterclasses有助于完成它。 |
Reading from and Writing into Binary files It involves reading from and writing into binary files. TheBinaryReaderandBinaryWriterclasses help to accomplish this. 它涉及从二进制文件读取和写入。 二进制Reader和BinaryWriterclasses有助于完成这一任务。 |
Manipulating the Windows file system It gives a VB.Net programmer the ability to browse and locate Windows files and directories. 它给了VB.Net程序员浏览和定位Windows文件和目录的能力。 |
对象是通过使用工具箱控件在Visual Basic窗体上创建的一种用户界面元素。 事实上,在Visual Basic中,表单本身是一个对象。 每个Visual Basic控件由三个重要元素组成:
Properties:描述对象的属性,
Methods:方法导致对象做某事,
Events:事件是当对象做某事时发生的事情。
Object. Property = Value
Object is the name of the object you're customizing. Object是您要定制的对象的名称。
Property is the characteristic you want to change. 属性是您要更改的特性。
Value is the new property setting. Value是新的属性设置。
例如,
Form1.Caption = "Hello"
您可以使用属性窗口设置任何窗体属性。 大多数属性可以在应用程序执行期间设置或读取。 您可以参考Microsoft文档中与应用于它们的不同控件和限制相关的属性的完整列表。
方法是作为类的成员创建的过程,它们使对象做某事。 方法用于访问或操纵对象或变量的特性。 您将在类中使用的主要有两类方法:
1、如果您使用的工具箱提供的控件之一,您可以调用其任何公共方法。 这种方法的要求取决于所使用的类。
2、如果没有现有方法可以执行所需的任务,则可以向类添加一个方法。
例如,MessageBox控件有一个名为Show的方法,它在下面的代码片段中调用:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("Hello, World") End SubEnd Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'event handler code goes hereEnd Sub
这里,Handles MyBase.Load表示Form1_Load()子例程处理Load事件。 类似的方式,你可以检查存根代码点击,双击。 如果你想初始化一些变量,如属性等,那么你将这样的代码保存在Form1_Load()子程序中。 这里,重要的一点是事件处理程序的名称,默认情况下是Form1_Load,但您可以根据您在应用程序编程中使用的命名约定更改此名称。
VB.Net提供了各种各样的控件,帮助您创建丰富的用户界面。 所有这些控制的功能在相应的控制类中定义。 控制类在System.Windows.Forms命名空间中定义。
S.N. | 小部件和说明 |
---|---|
1 | Forms 形式 The container for all the controls that make up the user interface. 用于构成用户界面的所有控件的容器。 |
2 | TextBox 文本框 It represents a Windows text box control. 它代表一个Windows文本框控件。 |
3 | Label 标签 It represents a standard Windows label. 它代表一个标准的Windows标签。 |
4 | Button 按钮 It represents a Windows button control. 它代表一个Windows按钮控件。 |
5 | ListBox 列表框 It represents a Windows control to display a list of items. 它代表一个显示项目列表的Windows控件。 |
6 | ComboBox 组合框 It represents a Windows combo box control. 它代表一个Windows组合框控件。 |
7 | RadioButton 单选按钮 It enables the user to select a single option from a group of choices when paired with other RadioButton controls. 它使用户能够在与其他RadioButton控件配对时从一组选项中选择一个选项。 |
8 | CheckBox 复选框 It represents a Windows CheckBox. 它代表一个Windows复选框。 |
9 | PictureBox 图片框 It represents a Windows picture box control for displaying an image. 它表示用于显示图像的Windows画面框控件。 |
10 | ProgressBar 进度条 It represents a Windows progress bar control. 它代表一个Windows进度条控件。 |
11 | ScrollBar 滚动条 It Implements the basic functionality of a scroll bar control. 它实现滚动条控件的基本功能。 |
12 | DateTimePicker 日期输入框 It represents a Windows control that allows the user to select a date and a time and to display the date and time with a specified format. 它代表一个Windows控件,允许用户选择日期和时间,并以指定的格式显示日期和时间。 |
13 | TreeView 树状图 It displays a hierarchical collection of labeled items, each represented by a TreeNode. 它显示标签项的分层集合,每个由树节点表示。 |
14 | ListView 列表显示 It represents a Windows list view control, which displays a collection of items that can be displayed using one of four different views. 它代表一个Windows列表视图控件,它显示可以使用四个不同视图之一显示的项目集合。 |
Abort 中止 - returns DialogResult.Abort value, when user clicks an Abort button. 当用户单击“中止”按钮时,返回DialogResult.Abort值。
Cancel 取消 -returns DialogResult.Cancel, when user clicks a Cancel button. 当用户单击Ignore按钮时,返回DialogResult.Ignore。
Ignore 忽略 -returns DialogResult.Ignore, when user clicks an Ignore button. 返回DialogResult.No,当用户单击否按钮。
No -returns DialogResult.No, when user clicks a No button. 不返回任何内容,对话框继续运行。
None 无 -returns nothing and the dialog box continues running. 返回DialogResult.OK,当用户单击确定按钮
OK -returns DialogResult.OK, when user clicks an OK button. 返回DialogResult. OK,当用户点击OK键
Retry 重试 -returns DialogResult.Retry , when user clicks an Retry button. 当用户单击重试按钮时,返回DialogResult.Retry
Yes -returns DialogResult.Yes, when user clicks an Yes button. 返回DialogResult.Yes,当用户单击是按钮
下图显示了通用对话框类继承:
S.N. | 控制& 说明 |
---|---|
1 | It represents a common dialog box that displays available colors along with controls that enable the user to define custom colors. 它表示一个公共对话框,显示可用颜色以及允许用户定义自定义颜色的控件。 |
2 | It prompts the user to choose a font from among those installed on the local computer and lets the user select the font, font size, and color. 它提示用户从安装在本地计算机上的字体中选择字体,并让用户选择字体,字体大小和颜色。 |
3 | It prompts the user to open a file and allows the user to select a file to open. 它提示用户打开文件,并允许用户选择要打开的文件。 |
4 | It prompts the user to select a location for saving a file and allows the user to specify the name of the file to save data. 它提示用户选择保存文件的位置,并允许用户指定保存数据的文件的名称。 |
5 | It lets the user to print documents by selecting a printer and choosing which sections of the document to print from a Windows Forms application. 它允许用户通过选择打印机并从Windows窗体应用程序中选择要打印的文档的哪些部分来打印文档。 |
|
在本章中,我们将研究以下概念:
在应用程序中添加菜单和子菜单
在表单中添加剪切,复制和粘贴功能
锚定和对接控制在一种形式
模态形式
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'defining the main menu bar Dim mnuBar As New MainMenu() 'defining the menu items for the main menu bar Dim myMenuItemFile As New MenuItem("&File") Dim myMenuItemEdit As New MenuItem("&Edit") Dim myMenuItemView As New MenuItem("&View") Dim myMenuItemProject As New MenuItem("&Project") 'adding the menu items to the main menu bar mnuBar.MenuItems.Add(myMenuItemFile) mnuBar.MenuItems.Add(myMenuItemEdit) mnuBar.MenuItems.Add(myMenuItemView) mnuBar.MenuItems.Add(myMenuItemProject) ' defining some sub menus Dim myMenuItemNew As New MenuItem("&New") Dim myMenuItemOpen As New MenuItem("&Open") Dim myMenuItemSave As New MenuItem("&Save") 'add sub menus to the File menu myMenuItemFile.MenuItems.Add(myMenuItemNew) myMenuItemFile.MenuItems.Add(myMenuItemOpen) myMenuItemFile.MenuItems.Add(myMenuItemSave) 'add the main menu to the form Me.Menu = mnuBar ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
Windows窗体包含一组丰富的类,用于创建您自己的具有现代外观,外观和感觉的自定义菜单。 MenuStrip,ToolStripMenuItem,ContextMenuStrip控件用于有效地创建菜单栏和上下文菜单。
点击以下链接查看他们的详细信息:
S.N. | Control & Description |
---|---|
1 | It provides a menu system for a form. 它为表单提供了一个菜单系统。 |
2 | It represents a selectable option displayed on a MenuStrip orContextMenuStrip. The ToolStripMenuItem control replaces and adds functionality to the MenuItem control of previous versions. 它表示在MenuStrip或ContextMenuStrip上显示的可选选项。 ToolStripMenuItem控件替换和添加以前版本的MenuItem控件的功能。 |
2 | It represents a shortcut menu. 它代表一个快捷菜单。 |
SN | 方法名称和说明 |
---|---|
1 | Clear Removes all data from the Clipboard. 删除从剪贴板中的所有数据。 |
2 | ContainsData Indicates whether there is data on the Clipboard that is in the specified format or can be converted to that format. 指示是否有上是在指定的格式或可转换成此格式的剪贴板中的数据。 |
3 | ContainsImage Indicates whether there is data on the Clipboard that is in the Bitmap format or can be converted to that format. 指示是否有关于那就是在Bitmap格式或可转换成该格式剪贴板数据。 |
4 | ContainsText Indicates whether there is data on the Clipboard in the Text or UnicodeText format, depending on the operating system. 指示是否在文本或UnicodeText格式剪贴板中的数据,根据不同的操作系统。 |
5 | GetData Retrieves data from the Clipboard in the specified format. 从指定格式的剪贴板中检索数据。 |
6 | GetDataObject Retrieves the data that is currently on the system Clipboard. 检索是目前系统剪贴板中的数据。 |
7 | getImage Retrieves an image from the Clipboard. 检索从剪贴板中的图像。 |
8 | getText Retrieves text data from the Clipboard in the Text or UnicodeText format, depending on the operating system. 从文本或UnicodeText格式剪贴板中检索文本数据,根据不同的操作系统。 |
9 | getText(TextDataFormat) Retrieves text data from the Clipboard in the format indicated by the specified TextDataFormat value. 从由指定TextDataFormat值指示的格式剪贴板中检索文本数据。 |
10 | SetData Clears the Clipboard and then adds data in the specified format. 清除剪贴板,然后以指定的格式将数据添加。 |
11 | setText(String) Clears the Clipboard and then adds text data in the Text or UnicodeText format, depending on the operating system. 清除剪贴板,然后添加在文本或UnicodeText格式的文本数据,根据不同的操作系统。 |
以下是一个示例,其中显示了如何使用Clipboard类的方法剪切,复制和粘贴数据。 执行以下步骤:
在表单上添加丰富的文本框控件和三个按钮控件。
将按钮的文本属性分别更改为“剪切”,“复制”和“粘贴”。
双击按钮,在代码编辑器中添加以下代码:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) RichTextBox1.SelectedText = "" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) _ Handles Button2.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) _ Handles Button3.Click Dim iData As IDataObject iData = Clipboard.GetDataObject() If (iData.GetDataPresent(DataFormats.Text)) Then RichTextBox1.SelectedText = iData.GetData(DataFormats.Text) Else RichTextBox1.SelectedText = " " End If End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
输入一些文本并检查按钮的工作方式。
输入一些文本并检查按钮的工作方式。
现在,当拉伸窗体时,Button和窗体右下角之间的距离保持不变。
例如,让我们在表单上添加一个Button控件,并将其Dock属性设置为Bottom。 运行此窗体以查看Button控件相对于窗体的原始位置。
现在,当你拉伸窗体时,Button会调整窗体的大小。
您可以通过两种方式调用模式窗体:
调用ShowDialog方法
调用Show方法
让我们举一个例子,我们将创建一个模态形式,一个对话框。 执行以下步骤:
将表单Form1添加到您的应用程序,并向Form1添加两个标签和一个按钮控件
将第一个标签和按钮的文本属性分别更改为“欢迎使用教程点”和“输入您的名称”。 将第二个标签的文本属性保留为空。
添加一个新的Windows窗体,Form2,并向Form2添加两个按钮,一个标签和一个文本框。
将按钮的文本属性分别更改为“确定”和“取消”。 将标签的文本属性更改为“输入您的姓名:”。
将Form2的FormBorderStyle属性设置为FixedDialog,为其提供对话框边框。
将Form2的ControlBox属性设置为False。
将Form2的ShowInTaskbar属性设置为False。
将OK按钮的DialogResult属性设置为OK,将Cancel按钮设置为Cancel。
在Form2的Form2_Load方法中添加以下代码片段:
Private Sub Form2_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load AcceptButton = Button1 CancelButton = Button2End Sub
在Form1的Button1_Click方法中添加以下代码片段:
Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Dim frmSecond As Form2 = New Form2() If frmSecond.ShowDialog() = DialogResult.OK Then Label2.Text = frmSecond.TextBox1.Text End IfEnd Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
点击“输入您的姓名”按钮显示第二个表单:
单击确定按钮将控制和信息从模态形式返回到先前的形式:
单击按钮,或在文本框中输入某些文本,或单击菜单项,都是事件的示例。 事件是调用函数或可能导致另一个事件的操作。
事件处理程序是指示如何响应事件的函数。
鼠标事件 Mouse events
键盘事件 Keyboard events
鼠标事件发生与鼠标移动形式和控件。以下是与Control类相关的各种鼠标事件:
MouseDown -当按下鼠标按钮时发生
MouseEnter -当鼠标指针进入控件时发生
MouseHover -当鼠标指针悬停在控件上时发生
MouseLeave -鼠标指针离开控件时发生
MouseMove -当鼠标指针移动到控件上时
MouseUp -当鼠标指针在控件上方并且鼠标按钮被释放时发生
MouseWheel -它发生在鼠标滚轮移动和控件有焦点时
鼠标事件的事件处理程序获得一个类型为MouseEventArgs的参数。 MouseEventArgs对象用于处理鼠标事件。它具有以下属性:
Buttons-表示按下鼠标按钮
Clicks-显示点击次数
Delta-表示鼠标轮旋转的定位槽的数量
X -指示鼠标点击的x坐标
Y -表示鼠标点击的y坐标
下面是一个例子,它展示了如何处理鼠标事件。执行以下步骤:
在表单中添加三个标签,三个文本框和一个按钮控件。
将标签的文本属性分别更改为 - 客户ID,名称和地址。
将文本框的名称属性分别更改为txtID,txtName和txtAddress。
将按钮的文本属性更改为“提交”。
在代码编辑器窗口中添加以下代码:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspont.com" End Sub Private Sub txtID_MouseEnter(sender As Object, e As EventArgs)_ Handles txtID.MouseEnter 'code for handling mouse enter on ID textbox txtID.BackColor = Color.CornflowerBlue txtID.ForeColor = Color.White End Sub Private Sub txtID_MouseLeave(sender As Object, e As EventArgs) _ Handles txtID.MouseLeave 'code for handling mouse leave on ID textbox txtID.BackColor = Color.White txtID.ForeColor = Color.Blue End Sub Private Sub txtName_MouseEnter(sender As Object, e As EventArgs) _ Handles txtName.MouseEnter 'code for handling mouse enter on Name textbox txtName.BackColor = Color.CornflowerBlue txtName.ForeColor = Color.White End Sub Private Sub txtName_MouseLeave(sender As Object, e As EventArgs) _ Handles txtName.MouseLeave 'code for handling mouse leave on Name textbox txtName.BackColor = Color.White txtName.ForeColor = Color.Blue End Sub Private Sub txtAddress_MouseEnter(sender As Object, e As EventArgs) _ Handles txtAddress.MouseEnter 'code for handling mouse enter on Address textbox txtAddress.BackColor = Color.CornflowerBlue txtAddress.ForeColor = Color.White End Sub Private Sub txtAddress_MouseLeave(sender As Object, e As EventArgs) _ Handles txtAddress.MouseLeave 'code for handling mouse leave on Address textbox txtAddress.BackColor = Color.White txtAddress.ForeColor = Color.Blue End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click MsgBox("Thank you " & txtName.Text & ", for your kind cooperation") End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
尝试在文本框中输入文字,并检查鼠标事件:
以下是与Control类相关的各种键盘事件:
KeyDown -当按下一个键并且控件具有焦点时发生
KeyPress -当按下一个键并且控件具有焦点时发生
KeyUp -当控件具有焦点时释放键时发生
KeyDown和KeyUp事件的事件处理程序获得一个类型为KeyEventArgs的参数。此对象具有以下属性:
Alt -它指示是否按下ALT键/ p>
Control-它指示是否按下CTRL键
Handled-它指示事件是否被处理
KeyCode- 存储事件的键盘代码
KeyData-存储事件的键盘数据
KeyValue -存储事件的键盘值
Modifiers-指示按下哪个修饰键(Ctrl,Shift和/或Alt)
Shift-表示是否按下Shift键
KeyDown和KeyUp事件的事件处理程序获得一个类型为KeyEventArgs的参数。此对象具有以下属性:
Handled-指示KeyPress事件处理
KeyChar -存储对应于按下的键的字符
让我们继续前面的例子来说明如何处理键盘事件。 代码将验证用户为其客户ID和年龄输入一些数字。
添加一个带有文本属性为“Age”的标签,并添加一个名为txtAge的相应文本框。
添加以下代码以处理文本框txtID的KeyUP事件。
Private Sub txtID_KeyUP(sender As Object, e As KeyEventArgs) _ Handles txtID.KeyUp If (Not Char.IsNumber(ChrW(e.KeyCode))) Then MessageBox.Show("Enter numbers for your Customer ID") txtID.Text = " " End IfEnd Sub
添加以下代码以处理文本框txtID的KeyUP事件。
Private Sub txtAge_KeyUP(sender As Object, e As KeyEventArgs) _ Handles txtAge.KeyUp If (Not Char.IsNumber(ChrW(e.keyCode))) Then MessageBox.Show("Enter numbers for age") txtAge.Text = " " End IfEnd Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
如果将age或ID的文本留空,或输入一些非数字数据,则会出现一个警告消息框,并清除相应的文本:
正则表达式是可以与输入文本匹配的模式。 .Net框架提供了允许这种匹配的正则表达式引擎。 模式由一个或多个字符文字,运算符或构造组成。
有各种类别的字符,运算符和构造,允许您定义正则表达式。 单击以下链接以查找这些结构。
正则表达式类用于表示一个正则表达式。
正则表达式类有以下常用方法:
SN | 方法和说明 |
---|---|
1 | Public Function IsMatch (input As String) As Boolean 表示在正则表达式构造函数中指定的正则表达式是否发现在指定的输入字符串匹配。 |
2 | Public Function IsMatch (input As String, startat As Integer ) As Boolean 公共函数IsMatch(输入作为字符串,startat作为整数)作为布尔 指示在Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的起始位置开始。 |
3 | Public Shared Function IsMatch (input As String, pattern As String ) As Boolean 公共共享函数IsMatch(输入作为字符串,图案作为字符串)作为布尔 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
4 | Public Function Matches (input As String) As MatchCollection 公共函数匹配(输入作为字符串)作为MatchCollection 搜索指定的输入字符串以查找正则表达式的所有出现。 |
5 | Public Function Replace (input As String, replacement As String) As String 公共函数替换(输入作为字符串,更换作为字符串)作为字符串 在指定的输入字符串中,使用指定的替换字符串替换与正则表达式模式匹配的所有字符串。 |
6 | Public Function Split (input As String) As String() 公共函数(输入作为字符串)作为字符串() 将输入字符串插入到由正则表达式构造函数中指定一个正则表达式模式定义的位置的子字符串数组。 |
有关方法和属性的完整列表,请参阅Microsoft文档。
以下示例匹配以“S”开头的单词:
Imports System.Text.RegularExpressionsModule regexProg Sub showMatch(ByVal text As String, ByVal expr As String) Console.WriteLine("The Expression: " + expr) Dim mc As MatchCollection = Regex.Matches(text, expr) Dim m As Match For Each m In mc Console.WriteLine(m) Next m End Sub Sub Main() Dim str As String = "A Thousand Splendid Suns" Console.WriteLine("Matching words that start with 'S': ") showMatch(str, "SS*") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Matching words that start with 'S':The Expression: SS*SplendidSuns
以下示例匹配以“m”开头并以“e”结尾的单词:
Imports System.Text.RegularExpressionsModule regexProg Sub showMatch(ByVal text As String, ByVal expr As String) Console.WriteLine("The Expression: " + expr) Dim mc As MatchCollection = Regex.Matches(text, expr) Dim m As Match For Each m In mc Console.WriteLine(m) Next m End Sub Sub Main() Dim str As String = "make a maze and manage to measure it" Console.WriteLine("Matching words that start with 'm' and ends with 'e': ") showMatch(str, "mS*e") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Matching words start with 'm' and ends with 'e':The Expression: mS*emakemazemanagemeasure
此示例替换了额外的空白空间:
Imports System.Text.RegularExpressionsModule regexProg Sub Main() Dim input As String = "Hello World " Dim pattern As String = "s+" Dim replacement As String = " " Dim rgx As Regex = New Regex(pattern) Dim result As String = rgx.Replace(input, replacement) Console.WriteLine("Original String: {0}", input) Console.WriteLine("Replacement String: {0}", result) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Original String: Hello World Replacement String: Hello World
ADO.Net对象模型只不过是通过各种组件的结构化流程。 对象模型可以被图形描述为:
通过数据提供者检索驻留在数据存储或数据库中的数据。 数据提供者的各种组件检索应用程序的数据并更新数据。
应用程序通过数据集或数据读取器访问数据。
Datasets 数据集:数据集将数据存储在断开连接的缓存中,应用程序从中检索数据。
Data readers 数据读取:数据读取器以只读和仅转发模式向应用程序提供数据。
SN | 对象和说明 |
---|---|
1 | Connection This component is used to set up a connection with a data source. 该组件被用来建立与数据源的连接。 |
2 | Command A command is a SQL statement or a stored procedure used to retrieve, insert, delete or modify data in a data source. 命令是用于检索,插入,删除或修改数据源中的数据的SQL语句或存储过程。 |
3 | DataReader Data reader is used to retrieve data from a data source in a read-only and forward-only mode. 数据读取器用于以只读和仅转发模式从数据源检索数据。 |
4 | DataAdapter This is integral to the working of ADO.Net since data is transferred to and from a database through a data adapter. It retrieves data from a database into a dataset and updates the database. When changes are made to the dataset, the changes in the database are actually done by the data adapter. 这是ADO.Net的工作的组成部分,因为数据通过数据适配器传输到数据库和从数据库传输。 它将数据从数据库检索到数据集并更新数据库。 当对数据集进行更改时,数据库中的更改实际上由数据适配器完成。 |
ADO.Net中包含以下不同类型的数据提供程序
SQL Server的.Net Framework数据提供者 - 提供对Microsoft SQL Server的访问。
OLE DB的.Net Framework数据提供者 - 提供对使用OLE DB公开的数据源的访问。
ODBC的.Net Framework数据提供程序 - 提供对ODBC公开的数据源的访问。
Oracle的.Net Framework数据提供程序 - 提供对Oracle数据源的访问。
EntityClient提供程序 - 允许通过实体数据模型(EDM)应用程序访问数据。
DataSet是数据的内存表示。 它是从数据库检索的断开连接的高速缓存的记录集。 当与数据库建立连接时,数据适配器创建数据集并在其中存储数据。 在检索数据并将其存储在数据集中之后,将关闭与数据库的连接。 这被称为“断开连接的架构”。 数据集用作包含表,行和列的虚拟数据库。
下图显示了数据集对象模型:
DataSet类存在于System.Data命名空间中。 下表描述了DataSet的所有组件:
SN | 组件及说明 |
---|---|
1 | DataTableCollection It contains all the tables retrieved from the data source. 它包含了从数据源中检索的所有表。 |
2 | DataRelationCollection It contains relationships and the links between tables in a data set. 它包含数据集中的表之间的关系和链接。 |
3 | ExtendedProperties It contains additional information, like the SQL statement for retrieving data, time of retrieval, etc. 它包含的其他信息,例如用于检索数据的SQL语句,检索的时间等 |
4 | DataTable It represents a table in the DataTableCollection of a dataset. It consists of the DataRow and DataColumn objects. The DataTable objects are case-sensitive. 它表示数据集的DataTableCollection中的表。它由DataRow和DataColumn对象组成。 DataTable对象区分大小写。 |
5 | DataRelation It represents a relationship in the DataRelationshipCollection of the dataset. It is used to relate two DataTable objects to each other through the DataColumn objects. 它表示数据集的DataRelationshipCollection中的关系。它用于通过DataColumn对象将两个DataTable对象相互关联。 |
6 | DataRowCollection It contains all the rows in a DataTable. 它包含DataTable中的所有行。 |
7 | DataView It represents a fixed customized view of a DataTable for sorting, filtering, searching, editing and navigation. 它表示用于排序,过滤,搜索,编辑和导航的DataTable的固定自定义视图。 |
8 | PrimaryKey It represents the column that uniquely identifies a row in a DataTable. 它表示唯一标识DataTable中某一行的列。 |
9 | DataRow It represents a row in the DataTable. The DataRow object and its properties and methods are used to retrieve, evaluate, insert, delete, and update values in the DataTable. The NewRow method is used to create a new row and the Add method adds a row to the table. 它表示DataTable中的一行。 DataRow对象及其属性和方法用于检索,评估,插入,删除和更新DataTable中的值。 NewRow方法用于创建一个新行,Add方法向表中添加一行。 |
10 | DataColumnCollection It represents all the columns in a DataTable. 它表示DataTable中的所有列。 |
11 | DataColumn It consists of the number of columns that comprise a DataTable. 它由组成DataTable的列数组成。 |
.Net框架提供两种类型的Connection类:
SqlConnection -设计用于连接到Microsoft SQL Server。
OleDbConnection -设计用于连接到各种数据库,如Microsoft Access和Oracle。
让我们连接到此数据库。 执行以下步骤:
选择工具 - >连接到数据库
在“添加连接”对话框中选择服务器名称和数据库名称。
单击测试连接按钮以检查连接是否成功。
在表单上添加一个DataGridView。
单击选择数据源组合框。
单击添加项目数据源链接。
这将打开“数据源配置向导”。
选择“数据库”作为数据源类型
选择的DataSet作为数据库模型。
选择已设置的连接。
保存连接字符串。
在我们的示例中选择数据库对象Customers表,然后单击完成按钮。
选择“预览数据”链接以查看“结果”网格中的数据:
当使用Microsoft Visual Studio工具栏上的“开始”按钮运行应用程序时,将显示以下窗口:
在这个例子中,让我们使用代码访问DataGridView控件中的数据。 执行以下步骤:
在窗体中添加一个DataGridView控件和一个按钮。
将按钮控件的文本更改为“填充”。
双击按钮控件,为按钮的Click事件添加所需的代码,如下所示:
Imports System.Data.SqlClientPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load 'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table. You can move, or remove it, as needed. Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS) ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim connection As SqlConnection = New sqlconnection() connection.ConnectionString = "Data Source=KABIR-DESKTOP; _ Initial Catalog=testDB;Integrated Security=True" connection.Open() Dim adp As SqlDataAdapter = New SqlDataAdapter _ ("select * from Customers", connection) Dim ds As DataSet = New DataSet() adp.Fill(ds) DataGridView1.DataSource = ds.Tables(0) End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击“填充”按钮可显示数据网格视图控件上的表:
到目前为止,我们已经使用我们的计算机中已经存在的表和数据库。 在本示例中,我们将创建一个表,向其中添加列,行和数据,并使用DataGridView对象显示表。
执行以下步骤:
在窗体中添加一个DataGridView控件和一个按钮。
将按钮控件的文本更改为“填充”。
在代码编辑器中添加以下代码。
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspont.com" End Sub Private Function CreateDataSet() As DataSet 'creating a DataSet object for tables Dim dataset As DataSet = New DataSet() ' creating the student table Dim Students As DataTable = CreateStudentTable() dataset.Tables.Add(Students) Return dataset End Function Private Function CreateStudentTable() As DataTable Dim Students As DataTable Students = New DataTable("Student") ' adding columns AddNewColumn(Students, "System.Int32", "StudentID") AddNewColumn(Students, "System.String", "StudentName") AddNewColumn(Students, "System.String", "StudentCity") ' adding rows AddNewRow(Students, 1, "Zara Ali", "Kolkata") AddNewRow(Students, 2, "Shreya Sharma", "Delhi") AddNewRow(Students, 3, "Rini Mukherjee", "Hyderabad") AddNewRow(Students, 4, "Sunil Dubey", "Bikaner") AddNewRow(Students, 5, "Rajat Mishra", "Patna") Return Students End Function Private Sub AddNewColumn(ByRef table As DataTable, _ ByVal columnType As String, ByVal columnName As String) Dim column As DataColumn = _ table.Columns.Add(columnName, Type.GetType(columnType)) End Sub 'adding data into the table Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,_ ByRef name As String, ByRef city As String) Dim newrow As DataRow = table.NewRow() newrow("StudentID") = id newrow("StudentName") = name newrow("StudentCity") = city table.Rows.Add(newrow) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim ds As New DataSet ds = CreateDataSet() DataGridView1.DataSource = ds.Tables("Student") End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击“填充”按钮可显示数据网格视图控件上的表:
VB.Net提供对Microsoft Excel 2010的COM对象模型和应用程序之间的互操作性的支持。
要在应用程序中使用此互操作性,您需要在Windows窗体应用程序中导入命名空间Microsoft.Office.Interop.Excel。
让我们从Microsoft Visual Studio中的以下步骤开始创建窗体表单应用程序:文件 - >新建项目 - > Windows窗体应用程序
最后,选择确定,Microsoft Visual Studio创建您的项目并显示以下Form1。
在窗体中插入Button控件Button1。
向项目中添加对Microsoft Excel对象库的引用。 进行以下操作:
从项目菜单中选择添加引用。
在COM选项卡上,找到Microsoft Excel对象库,然后单击选择。
点击OK。
双击代码窗口并填充Button1的Click事件,如下所示。
' Add the following code snippet on top of Form1.vbImports Excel = Microsoft.Office.Interop.ExcelPublic Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim appXL As Excel.Application Dim wbXl As Excel.Workbook Dim shXL As Excel.Worksheet Dim raXL As Excel.Range ' Start Excel and get Application object. appXL = CreateObject("Excel.Application") appXL.Visible = True ' Add a new workbook. wbXl = appXL.Workbooks.Add shXL = wbXl.ActiveSheet ' Add table headers going cell by cell. shXL.Cells(1, 1).Value = "First Name" shXL.Cells(1, 2).Value = "Last Name" shXL.Cells(1, 3).Value = "Full Name" shXL.Cells(1, 4).Value = "Specialization" ' Format A1:D1 as bold, vertical alignment = center. With shXL.Range("A1", "D1") .Font.Bold = True .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter End With ' Create an array to set multiple values at once. Dim students(5, 2) As String students(0, 0) = "Zara" students(0, 1) = "Ali" students(1, 0) = "Nuha" students(1, 1) = "Ali" students(2, 0) = "Arilia" students(2, 1) = "RamKumar" students(3, 0) = "Rita" students(3, 1) = "Jones" students(4, 0) = "Umme" students(4, 1) = "Ayman" ' Fill A2:B6 with an array of values (First and Last Names). shXL.Range("A2", "B6").Value = students ' Fill C2:C6 with a relative formula (=A2 & " " & B2). raXL = shXL.Range("C2", "C6") raXL.Formula = "=A2 & "" "" & B2" ' Fill D2:D6 values. With shXL .Cells(2, 4).Value = "Biology" .Cells(3, 4).Value = "Mathmematics" .Cells(4, 4).Value = "Physics" .Cells(5, 4).Value = "Mathmematics" .Cells(6, 4).Value = "Arabic" End With ' AutoFit columns A:D. raXL = shXL.Range("A1", "D1") raXL.EntireColumn.AutoFit() ' Make sure Excel is visible and give the user control ' of Excel's lifetime. appXL.Visible = True appXL.UserControl = True ' Release object references. raXL = Nothing shXL = Nothing wbXl = Nothing appXL.Quit() appXL = Nothing Exit SubErr_Handler: MsgBox(Err.Description, vbCritical, "Error: " & Err.Number) End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击按钮将显示以下excel表。 将要求您保存工作簿。
VB.Net允许从您的应用程序发送电子邮件。 System.Net.Mail命名空间包含用于向简单邮件传输协议(SMTP)服务器发送电子邮件以进行传递的类。
下表列出了一些常用的类:
SN | 类 | 描述 |
---|---|---|
1 | Attachment | 表示对电子邮件的附件。 |
2 | AttachmentCollection | 存储要作为电子邮件的一部分发送的附件。 |
3 | MailAddress | 表示电子邮件发件人或收件人的地址。 |
4 | MailAddressCollection | 存储与电子邮件相关联的电子邮件地址。 |
5 | MailMessage | 表示可以使用SmtpClient类发送的电子邮件。 |
6 | SmtpClient | 允许应用程序使用简单邮件传输协议(SMTP)发送电子邮件。 |
7 | SmtpException | 表示当SmtpClient无法完成发送或SendAsync操作时抛出的异常。 |
以下是SmtpClient类的一些常用属性:
SN | 属性 | 描述 |
---|---|---|
1 | ClientCertificates | 指定应使用哪些证书建立安全套接字层(SSL)连接。 |
2 | Credentials | 获取或设置用于验证发件人的凭据。 |
3 | EnableSsl | 指定SmtpClient是否使用安全套接字层(SSL)加密连接。 |
4 | Host | 获取或设置用于SMTP事务的主机的名称或IP地址。 |
5 | Port | 获取或设置用于SMTP事务的端口。 |
6 | Timeout | 获取或设置一个值,该值指定同步发送调用超时的时间量。 |
7 | UseDefaultCredentials | 获取或设置一个布尔值,该值控制是否随请求一起发送DefaultCredentials。 |
以下是SmtpClient类的一些常用方法:
SN | 方法和说明 |
---|---|
1 | Dispose 向SMTP服务器发送QUIT消息,正常结束TCP连接,并释放SmtpClient类的当前实例使用的所有资源。 |
2 | Dispose(Boolean) 向SMTP服务器发送QUIT消息,正常结束TCP连接,释放由SmtpClient类的当前实例使用的所有资源,并且可选地处置托管资源。 |
3 | OnSendCompleted 引发SendCompleted事件。 |
4 | Send(MailMessage) 将指定的消息发送到SMTP服务器进行传递。 |
5 | Send(String,String,String,String) 将指定的电子邮件发送到SMTP服务器进行传送。消息发件人,收件人,主题和邮件正文使用String对象指定。 |
6 | SendAsync(MailMessage,Object) 将指定的电子邮件发送到SMTP服务器进行传送。此方法不会阻止调用线程,并允许调用者将一个对象传递给操作完成时调用的方法。 |
7 | SendAsync(String,String,String,String,Object) 将电子邮件发送到SMTP服务器进行传送。消息发件人,收件人,主题和邮件正文使用String对象指定。此方法不会阻止调用线程,并允许调用者将一个对象传递给操作完成时调用的方法。
|
8 | SendAsyncCancel 取消异步操作以发送电子邮件。 |
9 | SendMailAsync(MAILMESSAGE) 发送指定消息,以交付作为异步操作的SMTP服务器。 |
10 | SendMailAsync(MailMessage) 将指定的消息发送到SMTP服务器以作为异步操作进行传递。
|
11 | ToString 返回表示当前对象的字符串。
|
以下示例演示如何使用SmtpClient类发送邮件。 在这方面应注意以下几点:
您必须指定用于发送电子邮件的SMTP主机服务器。 不同主机服务器的主机和端口属性将不同。 我们将使用gmail服务器。
如果SMTP服务器需要,您需要授予认证凭据。
您还应该分别使用MailMessage.From和MailMessage.To属性提供发件人的电子邮件地址和收件人的电子邮件地址。
您还应该使用MailMessage.Body属性指定消息内容。
在这个例子中,让我们创建一个发送电子邮件的简单应用程序。 执行以下步骤:
在表单中添加三个标签,三个文本框和一个按钮控件。
将标签的文本属性分别更改为 - “From”,“To:”和“Message:”。
将文本的名称属性分别更改为txtFrom,txtTo和txtMessage。
将按钮控件的文本属性更改为“发送”
在代码编辑器中添加以下代码。
Imports System.Net.MailPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try Dim Smtp_Server As New SmtpClient Dim e_mail As New MailMessage() Smtp_Server.UseDefaultCredentials = False Smtp_Server.Credentials = New Net.NetworkCredential("username@gmail.com", "password") Smtp_Server.Port = 587 Smtp_Server.EnableSsl = True Smtp_Server.Host = "smtp.gmail.com" e_mail = New MailMessage() e_mail.From = New MailAddress(txtFrom.Text) e_mail.To.Add(txtTo.Text) e_mail.Subject = "Email Sending" e_mail.IsBodyHtml = False e_mail.Body = txtMessage.Text Smtp_Server.Send(e_mail) MsgBox("Mail Sent") Catch error_t As Exception MsgBox(error_t.ToString) End Try End Sub您必须提供您的gmail地址和真实密码以获取凭据。
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口,您将使用该窗口发送电子邮件,自行尝试。
SN | 类 | 描述 |
---|---|---|
1 | XmlAttribute | 表示属性。属性的有效值和默认值在文档类型定义(DTD)或模式中定义。 |
2 | XmlCDataSection | 表示一个CDATA部分。 |
3 | XmlCharacterData | 提供由几个类使用的文本处理方法。 |
4 | XMLCOMMENT | 表示一个XML注释的内容。 |
5 | XmlConvert | 对XML名称进行编码和解码,并提供在公共语言运行时类型和XML模式定义语言(XSD)类型之间进行转换的方法。转换数据类型时,返回的值与语言环境无关。 |
6 | XmlDeclaration | 表示XML声明节点<?xml version ='1.0'...?>。 |
7 | XmlDictionary | 实现一本字典用来优化 Windows 通信基础(WCF) 的 XML 读取器/编写器实现。 |
8 | XmlDictionaryReader | Windows Communication Foundation(WCF)从XmlReader派生来进行序列化和反序列化的抽象类。 |
9 | XmlDictionaryWriter | 表示Windows Communication Foundation(WCF)从XmlWriter派生来进行序列化和反序列化的抽象类。 |
10 | XmlDocument | 表示XML文档。 |
11 | XmlDocumentFragment | 表示对树插入操作有用的轻量级对象。 |
12 | XmlDocumentType | 表示文档类型声明。 |
13 | XmlElement | 表示一个元素。 |
14 | XmlEntity | 表示一个实体声明,如<!ENTITY ...>。 |
15 | XmlEntityReference | 表示一个实体引用节点。 |
16 | XmlException | 返回有关最后一个异常的详细信息。 |
17 | XmlImplementation | 定义一组XmlDocument对象的上下文。 |
18 | XmlLinkedNode | 获取此节点之前或之后的节点。 |
19 | XmlNode | 表示XML文档中的单个节点。 |
20 | XmlNodeList | 表示节点的有序集合。 |
21 | XmlNodeReader | 表示提供对XmlNode中的XML数据的快速,非缓存转发访问的阅读器。 |
22 | XmlNotation | 表示一个注释声明,如<!NOTATION ...>。 |
23 | XmlParserContext | 提供XmlReader解析XML片段所需的所有上下文信息。 |
24 | XmlProcessingInstruction | 表示处理指令,XML定义为在文档的文本中保留处理器特定的信息。 |
25 | XmlQualifiedName | 表示一个XML限定名称。 |
26 | XmlReader | 表示一个阅读器,提供了快速,非缓存,只进到XML数据访问。 |
27 | XmlReaderSettings | 指定一组要在Create方法创建的XmlReader对象上支持的要素。 |
28 | XmlResolver | 解析由统一资源标识符(URI)命名的外部XML资源。 |
29 | XmlSecureResolver | 有助于通过封装XmlResolver对象并限制底层XmlResolver有权访问的资源来保护XmlResolver的另一个实现。 |
30 | XmlSignificantWhitespace | 表示混合内容节点中的标记之间或xml:space ='preserve'范围内的空白空间中的空格。这也称为有效的空白空间。 |
31 | XmlText | 表示元素或属性的文本内容。 |
32 | XmlTextReader | 表示提供对XML数据的快速,非缓存,仅转发访问的阅读器。 |
33 | XmlTextWriter | 代表作家提供了一个快速,非缓存,只进生成包含符合W3C可扩展标记语言(XML)1.0和XML中建议的命名空间XML数据流或文件的方式。 |
34 | XmlUrlResolver | 解析由统一资源标识符(URI)命名的外部XML资源。 |
35 | XmlWhitespace | 代表元素内容中的空白。 |
36 | XmlWriter | 表示提供快速,非缓存,仅转发方式生成包含XML数据的流或文件的写入程序。 |
37 | XmlWriterSettings | 指定一组要在XmlWriter.Create方法创建的XmlWriter对象上支持的要素。 |
<?xml version="1.0"?><collection shelf="New Arrivals"><movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description></movie><movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description></movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description></movie><movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description></movie></collection>
此示例演示从文件movies.xml中读取XML数据。
执行以下步骤:
将movies.xml文件添加到应用程序的bin Debug文件夹中。
在Form1.vb文件中导入System.Xml命名空间。
在表单中添加标签,并将其文字更改为“Movies Galore”。
添加三个列表框和三个按钮,以显示来自xml文件的电影的标题,类型和描述。
使用代码编辑器窗口添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ListBox1().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then ListBox1.Items.Add(xr.GetAttribute(0)) End If Loop End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ListBox2().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then ListBox2.Items.Add(xr.ReadElementString) Else xr.Read() End If Loop End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click ListBox3().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then ListBox3.Items.Add(xr.ReadElementString) Else xr.Read() End If Loop End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击按钮将显示文件中电影的标题,类型和描述。
XmlWriter类用于将XML数据写入流,文件或TextWriter对象。 它也以只向前,非缓存的方式工作。
让我们通过在运行时添加一些数据来创建一个XML文件。 执行以下步骤:
在窗体中添加WebBrowser控件和按钮控件。
将按钮的Text属性更改为显示作者文件。
在代码编辑器中添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim xws As XmlWriterSettings = New XmlWriterSettings() xws.Indent = True xws.NewLineOnAttributes = True Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws) xw.WriteStartDocument() xw.WriteStartElement("Authors") xw.WriteStartElement("author") xw.WriteAttributeString("code", "1") xw.WriteElementString("fname", "Zara") xw.WriteElementString("lname", "Ali") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "2") xw.WriteElementString("fname", "Priya") xw.WriteElementString("lname", "Sharma") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "3") xw.WriteElementString("fname", "Anshuman") xw.WriteElementString("lname", "Mohan") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "4") xw.WriteElementString("fname", "Bibhuti") xw.WriteElementString("lname", "Banerjee") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "5") xw.WriteElementString("fname", "Riyan") xw.WriteElementString("lname", "Sengupta") xw.WriteEndElement() xw.WriteEndElement() xw.WriteEndDocument() xw.Flush() xw.Close() WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml") End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击显示作者文件将在Web浏览器上显示新创建的authors.xml文件。
根据文档对象模型(DOM),XML文档由节点和节点的属性组成。 XmlDocument类用于实现.Net框架的XML DOM解析器。 它还允许您通过插入,删除或更新文档中的数据来修改现有的XML文档。
以下是XmlDocument类的一些常用方法:
SN | 方法名称和说明 |
---|---|
1 | AppendChild 将指定的节点添加到此节点的子节点列表的末尾。 |
2 | CreateAttribute(String) 使用指定的名称创建XmlAttribute。 |
3 | CreateComment 创建包含指定数据的XmlComment。 |
4 | CreateDefaultAttribute 创建具有指定前缀,本地名称和命名空间URI的默认属性。 |
5 | CreateElement(String) 创建具有指定名称的元素。 |
6 | CreateNode(String, String, String) 创建具有指定节点类型,Name和NamespaceURI的XmlNode。 |
7 | CreateNode(XmlNodeType, String, String) 创建具有指定的XmlNodeType,Name和NamespaceURI的XmlNode。 |
8 | CreateNode(XmlNodeType, String, String, String) 创建具有指定的XmlNodeType,Prefix,Name和NamespaceURI的XmlNode。 |
9 | CreateProcessingInstruction 创建具有指定名称和数据的XmlProcessingInstruction。 |
10 | CreateSignificantWhitespace 创建一个XmlSignificantWhitespace节点。 |
11 | createTextNode 创建具有指定文本的XMLTEXT。 |
12 | CreateWhitespace 创建一个XmlWhitespace节点。 |
13 | CreateXmlDeclaration 创建一个具有指定值的XmlDeclaration节点。 |
14 | GetElementById 获取具有指定ID的XmlElement。 |
15 | GetElementsByTagName(String) 返回一个包含与指定名称匹配的所有后代元素的列表的XmlNodeList。 |
16 | GetElementsByTagName(String, String) 返回一个包含与指定名称匹配的所有后代元素的列表的XmlNodeList。 |
17 | InsertAfter 在指定的引用节点之后立即插入指定的节点。 |
18 | InsertBefore 在指定的引用节点之前插入指定的节点。 |
19 | Load(Stream) 从指定的流装载XML文档。 |
20 | Load(String) 从指定的TextReader加载XML文档。 |
21 | Load(TextReader) 从指定的TextReader加载XML文档。 |
22 | Load(XmlReader) 从指定的XmlReader加载XML文档。 |
23 | LoadXml 从指定的字符串加载XML文档。 |
24 | PrependChild 将指定的节点添加到此节点的子节点列表的开头。 |
25 | ReadNode 基于XmlReader中的信息创建XmlNode对象。读取器必须位于节点或属性上。 |
26 | RemoveAll 删除当前节点的所有子节点和/或属性。 |
27 | RemoveChild 删除指定的子节点。 |
28 | ReplaceChild 将子节点oldChild替换为newChild节点。 |
29 | Save(Stream) 保存XML文档到指定的流。 |
30 | Save(String) 将XML文档保存到指定的文件。 |
31 | Save(TextWriter) 将XML文档保存到指定的TextWriter。 |
32 | Save(XmlWriter) 将XML文档保存到指定的XmlWriter。 |
在本示例中,让我们在xml文档authors.xml中插入一些新节点,然后在列表框中显示所有作者的名字。
执行以下步骤:
将authors.xml文件添加到应用程序的bin / Debug文件夹中(如果您已经尝试了最后一个示例,应该在那里)
导入System.Xml命名空间
在表单中添加列表框和按钮控件,并将按钮控件的text属性设置为“显示作者”。
使用代码编辑器添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ListBox1.Items.Clear() Dim xd As XmlDocument = New XmlDocument() xd.Load("authors.xml") Dim newAuthor As XmlElement = xd.CreateElement("author") newAuthor.SetAttribute("code", "6") Dim fn As XmlElement = xd.CreateElement("fname") fn.InnerText = "Bikram" newAuthor.AppendChild(fn) Dim ln As XmlElement = xd.CreateElement("lname") ln.InnerText = "Seth" newAuthor.AppendChild(ln) xd.DocumentElement.AppendChild(newAuthor) Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing) tr.Formatting = Formatting.Indented xd.WriteContentTo(tr) tr.Close() Dim nl As XmlNodeList = xd.GetElementsByTagName("fname") For Each node As XmlNode In nl ListBox1.Items.Add(node.InnerText) Next node End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的作者。
动态Web应用程序包括以下两种类型的程序之一或两者:
服务器端脚本 -这些是在Web服务器上执行的程序,使用服务器端脚本语言(如ASP(Active Server Pages)或JSP(Java Server Pages))编写。
客户端脚本 -这些是在浏览器上执行的程序,使用脚本语言(如JavaScript,VBScript等)编写。
ASP.Net是由Microsoft引入的ASP的.Net版本,用于通过使用服务器端脚本创建动态网页。 ASP.Net应用程序是使用.Net框架中存在的可扩展和可重用组件或对象编写的编译代码。这些代码可以使用.Net框架中的类的整个层次结构。
ASP.Net应用程序代码可以用以下任何一种语言编写:
Visual Basic .NET
C#
Jscript脚本
J#
在本章中,我们将简要介绍使用VB.Net编写ASP.Net应用程序。有关详细讨论,请参阅ASP.Net教程。
ASP.Net有一些在Web服务器上运行的内置对象。 这些对象具有在应用程序开发中使用的方法,属性和集合。
下表列出了具有简要说明的ASP.Net内置对象:
目的 | 描述 |
---|---|
Application 应用 | 描述存储与整个Web应用程序相关的信息的对象的方法,属性和集合,包括应用程序生命周期中存在的变量和对象。 您使用此对象来存储和检索要在应用程序的所有用户之间共享的信息。例如,您可以使用Application对象来创建电子商务页面。
|
Request 请求 | 描述存储与HTTP请求相关的信息的对象的方法,属性和集合。这包括表单,Cookie,服务器变量和证书数据。 您使用此对象来访问在从浏览器到服务器的请求中发送的信息。例如,您可以使用Request对象来访问用户在HTML表单中输入的信息。
|
Response 响应 | 描述存储与服务器响应相关的信息的对象的方法,属性和集合。这包括显示内容,操作标头,设置区域设置和重定向请求。 您使用此对象向浏览器发送信息。例如,您使用Response对象将输出从脚本发送到浏览器。
|
Server 服务器 | 描述提供各种服务器任务的方法的对象的方法和属性。使用这些方法,您可以执行代码,获取错误条件,编码文本字符串,创建对象供网页使用,并映射物理路径。 您使用此对象访问服务器上的各种实用程序功能。例如,您可以使用Server对象为脚本设置超时。
|
Session 会话 | 描述存储与用户会话相关的信息的对象的方法,属性和集合,包括会话生存期内存在的变量和对象。 您使用此对象来存储和检索有关特定用户会话的信息。例如,您可以使用Session对象来保存有关用户及其首选项的信息,并跟踪待处理操作。
|
ASP.Net提供两种类型的编程模型:
Web Forms-这使您能够创建将应用于用户界面的各种组件的用户界面和应用程序逻辑。
WCF Services-这使您可以远程访问一些服务器端功能。
对于本章,您需要使用免费的Visual Studio Web Developer。 IDE与您已经用于创建Windows应用程序的IDE几乎相同。
Web表单包括:
用户界面
应用程序逻辑
用户界面包括静态HTML或XML元素和ASP.Net服务器控件。 创建Web应用程序时,HTML或XML元素和服务器控件存储在具有.aspx扩展名的文件中。 此文件也称为页面文件。
应用程序逻辑包括应用于页面中用户界面元素的代码。 你可以用任何.Net语言,如VB.Net或C#编写代码。
下图显示了“设计”视图中的Web窗体:
让我们创建一个带有Web表单的新网站,该表单将显示用户点击按钮时的当前日期和时间。 执行以下步骤:
选择文件 - >新建 - > Web站点。将出现“新建网站”对话框。
选择ASP.Net空网站模板。 键入网站的名称,然后选择保存文件的位置。
您需要向站点添加默认页面。 右键单击解决方案资源管理器中的网站名称,然后从上下文菜单中选择添加新项目选项。 将显示“添加新项”对话框:
选择Web窗体选项并提供默认页面的名称。 我们把它保存为Default.aspx。 单击添加按钮。
默认页面显示在源视图中
通过向“值”添加值来设置“默认”网页的标题
要在网页上添加控件,请转到设计视图。 在表单上添加三个标签,一个文本框和一个按钮。
双击该按钮,并将以下代码添加到该按钮的Click事件:
Protected Sub Button1_Click(sender As Object, e As EventArgs) _Handles Button1.Click Label2.Visible = True Label2.Text = "Welcome to Tutorials Point: " + TextBox1.Text Label3.Text = "You visited us at: " + DateTime.Now.ToString()End Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面:
输入您的姓名,然后点击提交按钮:
Web服务是一个Web应用程序,基本上是一个由其他应用程序可以使用的方法组成的类。它也遵循代码隐藏架构,如ASP.Net网页,虽然它没有用户界面。
.Net Framework的早期版本使用了ASP.Net Web Service的这个概念,它具有.asmx文件扩展名。然而,从.Net Framework 4.0开始,Windows通信基础(WCF)技术已经发展成为Web Services,.Net Remoting和一些其他相关技术的新继任者。它把所有这些技术结合在一起。在下一节中,我们将简要介绍Windows Communication Foundation(WCF)。
如果您使用先前版本的.Net Framework,您仍然可以创建传统的Web服务。有关详细说明,请参阅ASP.Net - Web服务详细说明。
Windows Communication Foundation或WCF提供了一个用于创建分布式面向服务的应用程序的API,称为WCF服务。
像Web服务一样,WCF服务也支持应用程序之间的通信。但是,与Web服务不同,此处的通信不仅限于HTTP。 WCF可以配置为通过HTTP,TCP,IPC和消息队列使用。支持WCF的另一个强点是,它提供对双工通信的支持,而对于Web服务,我们只能实现单工通信。
从初学者的角度来看,编写WCF服务与编写Web服务并不完全不同。为了保持简单,我们将看到如何:
创建一个WCF服务
创建一个服务合同并定义操作
执行合同
测试服务
使用该服务
要理解这个概念,让我们创建一个简单的服务,提供股价信息。客户可以根据股票代号查询股票的名称和价格。为了保持这个例子简单,这些值被硬编码在二维数组中。此服务将有两种方法:
GetPrice方法 - 它将返回股票的价格,基于提供的符号。
GetName方法 - 它将返回股票的名称,基于提供的符号。
创建WCF服务
执行以下步骤:
打开VS Express for Web 2012
选择新的网站,打开新建网站对话框。
选择模板列表中的WCF服务模板:
从Web位置下拉列表中选择文件系统。
提供WCF服务的名称和位置,然后单击“确定”。
创建一个新的WCF服务。
创建服务合同并定义操作
服务契约定义服务执行的操作。 在WCF服务应用程序中,您会发现在解决方案资源管理器中的App_Code文件夹中自动创建两个文件
IService.vb - 这将有服务合同; 在简单的话,它将有服务的接口,与服务将提供的方法的定义,您将在您的服务中实现。
Service.vb - 这将实现服务合同。
用给定的代码替换IService.vb文件的代码:
Public Interface IService <OperationContract()> Function GetPrice(ByVal symbol As String) As Double <OperationContract()> Function GetName(ByVal symbol As String) As StringEnd Interface
实施合同
在Service.vb文件中,您将找到一个名为Service的类,它将实现在IService接口中定义的服务契约。
使用以下代码替换IService.vb的代码:
' NOTE: You can use the "Rename" command on the context menu to change the class name "Service" in code, svc and config file together.Public Class Service Implements IService Public Sub New() End Sub Dim stocks As String(,) = { {"RELIND", "Reliance Industries", "1060.15"}, {"ICICI", "ICICI Bank", "911.55"}, {"JSW", "JSW Steel", "1201.25"}, {"WIPRO", "Wipro Limited", "1194.65"}, {"SATYAM", "Satyam Computers", "91.10"} } Public Function GetPrice(ByVal symbol As String) As Double _ Implements IService.GetPrice Dim i As Integer 'it takes the symbol as parameter and returns price For i = 0 To i = stocks.GetLength(0) - 1 If (String.Compare(symbol, stocks(i, 0)) = 0) Then Return Convert.ToDouble(stocks(i, 2)) End If Next i Return 0 End Function Public Function GetName(ByVal symbol As String) As String _ Implements IService.GetName ' It takes the symbol as parameter and ' returns name of the stock Dim i As Integer For i = 0 To i = stocks.GetLength(0) - 1 If (String.Compare(symbol, stocks(i, 0)) = 0) Then Return stocks(i, 1) End If Next i Return "Stock Not Found" End FunctionEnd Class
测试服务
要运行如此创建的WCF服务,请从菜单栏中选择Debug-> Start Debugging选项。 输出将是:
要测试服务操作,请从左窗格的树中双击操作的名称。 新的选项卡将显示在右窗格中。
在右窗格的“请求”区域中输入参数值,然后单击“调用”按钮。
下图显示了测试GetPrice操作的结果:
下图显示了测试GetName操作的结果:
使用服务
让我们在同一个解决方案中添加一个默认页面,一个ASP.NET Web窗体,我们将使用我们刚刚创建的WCF服务。
执行以下步骤:
右键单击解决方案资源管理器中的解决方案名称,并向解决方案添加新的Web表单。 它将被命名为Default.aspx。
在表单上添加两个标签,一个文本框和一个按钮。
我们需要添加一个服务引用到我们刚刚创建的WCF服务。 右键单击解决方案资源管理器中的网站,然后选择添加服务引用选项。 这将打开“添加服务引用”对话框。
在地址文本框中输入服务的URL(位置),然后单击执行按钮。 它使用默认名称ServiceReference1创建服务引用。 单击确定按钮。
添加引用为您的项目做了两个作业:
Partial Class _Default Inherits System.Web.UI.Page Protected Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Dim ser As ServiceReference1.ServiceClient = _ New ServiceReference1.ServiceClient Label2.Text = ser.GetPrice(TextBox1.Text).ToString() End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面:
输入符号并单击获取价格按钮以获得硬编码的价格:
以下资源包含有关VB.Net的其他信息。 请使用它们获得有关此主题的更深入的知识。
Visual Basic Resources − VB.Net官方网站给你最新的消息,更新和下载。
Visual Basic .NET − Wiki页面提供有关Visual Basic .NET的简要说明。
Mono Support for VisualBasic.NET − 尝试在Linux / Unix上使用Mono运行VB.Net程序
XCode − Xcode是苹果的强大的集成开发环境,为Mac,iPhone和iPad创建出色的应用程序。
在本章中,我们将讨论可用于创建VB.Net应用程序的工具。
我们已经提到VB.Net是.Net框架的一部分,用于编写.Net应用程序。 因此,在讨论用于运行VB.Net程序的可用工具之前,让我们先了解VB.Net如何与.Net框架相关。
.NET Framework是一个革命性的平台,可以帮助你编写以下类型的应用:
Windows应用程序
Web应用程序
网页服务
.Net框架应用程序是多平台应用程序。 该框架的设计方式使其可以从以下任何语言使用:Visual Basic,C#,C ++,Jscript和COBOL等。
.Net框架包含一个巨大的代码库,用于客户端语言(如VB.Net)。 这些语言使用面向对象的方法。
所有这些语言可以访问框架以及彼此通信。
以下是.Net框架的一些组件:
公共语言运行时(CLR) Common Language Runtime (CLR)
.NET框架类库 The .Net Framework Class Library
公共语言规范 Common Language Specification
通用类型系统 Common Type System
元数据和组件 Metadata and Assemblies
Windows窗体 Windows Forms
ASP.Net和ASP.Net AJAX
ADO.Net
Windows工作流基础(WF) Windows Workflow Foundation (WF)
Windows演示基础 Windows Presentation Foundation
Windows通讯基础(WCF) Windows Communication Foundation (WCF)
LINQ
对于每个组件执行的工作,请参阅ASP.Net -介绍 ,有关每个组件的详细信息,请参阅微软的文档。
Microsoft为VB.Net编程提供以下开发工具:
1、Visual Studio 2010(VS)
2、Visual Basic 2010 Express(VBE)
3、可视化Web开发
最后两个是免费的。 使用这些工具,您可以将各种VB.Net程序从简单的命令行应用程序写入到更复杂的应用程序。 Visual Basic Express和Visual Web Developer Express版是Visual Studio的精简版本,具有相同的外观和感觉。 它们保留了Visual Studio的大多数功能。 在本教程中,我们使用了Visual Basic 2010 Express和Visual Web Developer(针对Web编程章节)。
你可以从这里下载 。它会自动安装在您的计算机上。 请注意,您需要一个有效的互联网连接安装快速版本。
虽然.NET Framework在Windows操作系统上运行,但有一些替代版本可在其他操作系统上运行。 Mono是.NET Framework的开源版本,包括Visual Basic编译器,可在多种操作系统上运行,包括各种Linux和Mac OS。 最新版本是VB 2012。
Mono的既定目的不仅是能够跨平台运行Microsoft .NET应用程序,而且为Linux开发人员提供更好的开发工具。 Mono可以在许多操作系统上运行,包括Android,BSD,iOS,Linux,OS X,Windows,Solaris和UNIX。
在我们学习VB.Net编程语言的基本构建块之前,让我们看看一个最小的VB.Net程序结构,以便我们可以将它作为未来的章节的参考。
一个VB.Net程序主要由以下几部分组成:
命名空间声明 Namespace declaration
一个类或模块 A class or module
一个或多个程序 One or more procedures
变量 Variables
主过程 The Main procedure
语句和表达式 Statements & Expressions
注释 Comments
让我们看一个简单的代码,打印单词“Hello World”:
Imports SystemModule Module1 'This program will display Hello World Sub Main() Console.WriteLine("Hello World") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Hello, World!
让我们来看看上面的程序中的各个部分:
程序Imports System的第一行用于在程序中包括系统命名空间。The first line of the program Imports System is used to include the System namespace in the program.
下一行有一个Module声明,模块Module1。 VB.Net是完全面向对象的,所以每个程序必须包含一个类的模块,该类包含您的程序使用的数据和过程。The next line has a Module declaration, the module Module1. VB.Net is completely object oriented, so every program must contain a module of a class that contains the data and procedures that your program uses.
类或模块通常将包含多个过程。 过程包含可执行代码,或者换句话说,它们定义了类的行为。 过程可以是以下任何一种:
功能 Function
子 Sub
运算符 Operator
获取 Get
组 Set
AddHandler
RemoveHandler
的RaiseEvent
下一行('这个程序)将被编译器忽略,并且已经在程序中添加了额外的注释。
下一行定义了Main过程,它是所有VB.Net程序的入口点。 Main过程说明了模块或类在执行时将做什么。
Main过程使用语句指定其行为
Console.WriteLine(“Hello World”的)
WriteLine是在System命名空间中定义的Console类的一个方法。 此语句会导致消息"Hello,World !"在屏幕上显示。最后一行Console.ReadKey()是用于VS.NET用户的。 这将阻止屏幕从Visual Studio .NET启动时快速运行和关闭。
如果您使用Visual Studio.Net IDE,请执行以下步骤:
启动Visual Studio。 Start Visual Studio.
在菜单栏,选择文件,新建,项目。 On the menu bar, choose File, New, Project.
从模板中选择Visual Basic。Choose Visual Basic from templates
选择控制台应用程序。Choose Console Application.
使用浏览按钮指定项目的名称和位置,然后选择确定按钮。 Specify a name and location for your project using the Browse button, and then choose the OK button.
新项目显示在解决方案资源管理器中。 The new project appears in Solution Explorer.
在代码编辑器中编写代码。 Write code in the Code Editor.
单击运行按钮或F5键运行项目。 将出现一个包含行Hello World的命令提示符窗口。 Click the Run button or the F5 key to run the project. A Command Prompt window appears that contains the line Hello World.
您可以使用命令行而不是Visual Studio IDE编译VB.Net程序:
打开文本编辑器,并添加上述代码。 Open a text editor and add the above mentioned code.
将文件另存为helloworld.vb。 Save the file as helloworld.vb
打开命令提示符工具并转到保存文件的目录。 Open the command prompt tool and go to the directory where you saved the file.
类型VBC helloworld.vb,然后按回车编译代码。 Type vbc helloworld.vb and press enter to compile your code.
如果在你的代码中没有错误命令提示符下会带你到下一行,并会产生HelloWorld.exe的可执行文件。 If there are no errors in your code the command prompt will take you to the next line and would generate helloworld.exe executable file.
接下来,输入的HelloWorld来执行你的程序。 Next, type helloworld to execute your program.
您将可以看到“Hello World”字样在屏幕上。 You will be able to see "Hello World" printed on the screen.
VB.Net是一种面向对象的编程语言。 在面向对象编程方法中,程序由通过动作相互交互的各种对象组成。 对象可能采取的动作称为方法。 相同类型的对象被认为具有相同的类型,或者更经常地被称为在同一类中。
当我们考虑VB.Net程序时,它可以定义为通过调用对方的方法进行通信的对象的集合。 现在让我们简单地看看类,对象,方法和实例变量是什么意思。
Object 对象-对象具有状态和行为。 示例:狗有状态 - 颜色,名称,品种以及行为 - 摇摆,吠叫,吃饭等。对象是类的实例。
Class 类-类可以被定义为描述其类型的对象支持的行为/状态的模板/蓝图。
Methods 方法-方法基本上是一种行为。一个类可以包含许多方法。一般的程序逻辑在方法中体现,数据的操作和动作的执行也在方法中实现。
实例变量 -每个对象都有其唯一的实例变量集。 对象的状态由分配给这些实例变量的值创建。
例如,让我们考虑一个Rectangle对象。 它具有长度和宽度等属性。 根据设计,它可能需要接受这些属性的值,计算面积和显示细节的方式。
让我们看一个Rectangle类的实现,并在我们的观察的基础上讨论VB.Net基本语法:
Imports SystemPublic Class Rectangle Private length As Double Private width As Double 'Public methods Public Sub AcceptDetails() length = 4.5 width = 3.5 End Sub Public Function GetArea() As Double GetArea = length * width End Function Public Sub Display() Console.WriteLine("Length: {0}", length) Console.WriteLine("Width: {0}", width) Console.WriteLine("Area: {0}", GetArea()) End Sub Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine() End SubEnd Class
当上述代码被编译和执行时,它产生以下结果:
Length: 4.5Width: 3.5Area: 15.75
在上一章中,我们创建了一个包含代码的Visual Basic模块。 Sub Main表示VB.Net程序的入口点。 这里,我们使用包含代码和数据的类。 您使用类来创建对象。 例如,在代码中,r是一个Rectangle对象。
对象是类的一个实例:
Dim r As New Rectangle()
类可以具有可以从外部类访问的成员,如果指定的话。 数据成员称为字段,过程成员称为方法。
可以在不创建类的对象的情况下调用共享方法或静态方法。 通过类的一个对象调用实例方法:
Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine()End Sub
标识符是用于标识类,变量,函数或任何其他用户定义项的名称。 在VB.Net中命名类的基本规则如下:
名称必须以字母开头,后跟一个字母,数字(0 - 9)或下划线。 标识符中的第一个字符不能是数字。
不能包含任何空格或特殊符号(例如:? - +! @#%^&*()[] {}。 ; :“'/和)。但是,可以使用下划线(_)。
不可以使用保留关键字。
下表列出了VB.Net保留的关键字:
AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
ByRef | Byte | ByVal | Call | Case | Catch | CBool |
CByte | CChar | CDate | CDec | CDbl | Char | CInt |
Class | CLng | CObj | Const | Continue | CSByte | CShort |
CSng | CStr | CType | CUInt | CULng | CUShort | Date |
Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
Double | Each | Else | ElseIf | End | End If | Enum |
Erase | Error | Event | Exit | False | Finally | For |
Friend | Function | Get | GetType | GetXML Namespace | Global | GoTo |
Handles | If | Implements | Imports | In | Inherits | Integer |
Interface | Is | IsNot | Let | Lib | Like | Long |
Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
MyClass | Namespace | Narrowing | New | Next | Not | Nothing |
Not Inheritable | Not Overridable | Object | Of | On | Operator | Option |
Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
ReDim | REM | Remove Handler | Resume | Return | SByte | Select |
Set | Shadows | Shared | Short | Single | Static | Step |
Stop | String | Structure | Sub | SyncLock | Then | Throw |
To | True | Try | TryCast | TypeOf | UInteger | While |
Widening | With | WithEvents | WriteOnly | Xor |
数据类型指用于声明不同类型的变量或函数的扩展系统。 变量的类型确定它在存储中占用多少空间以及如何解释存储的位模式。
VB.Net提供了多种数据类型。下表显示的所有数据类型可用的:
数据类型 | 存储分配 | 值范围 |
---|---|---|
Boolean | 取决于实施平台 | 真或假 |
Byte | 1个字节 | 0到255(无符号) |
Char | 2个字节 | 0〜65535(无符号) |
Date | 8个字节 | 00:00:00(午夜),时间为0001年12月31日11时31分至晚上11:59:59 |
Decimal | 16字节 | 0至+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9 ... E + 28),没有小数点; 0到+/- 7.9228162514264337593543950335,其中小数点右边有28个位 |
Double | 8个字节 | -1.79769313486231570E + 308至-4.94065645841246544E-324,对于负值 4.94065645841246544E-324至1.79769313486231570E + 308,对于正值 |
Integer | 4个字节 | -2,147,483,648至2,147,483,647(有符号) |
Long | 8个字节 | -9,223,372,036,854,775,808至9,223,372,036,854,775,807(签字) |
Object | 在32位平台上的4个字节 在64位平台8字节 | 任何类型都可以存储在Object类型的变量中 |
SByte | 1个字节 | -128至127(签字) |
Short | 2个字节 | -32,768至32,767(签字) |
Single | 4个字节 | -3.4028235E + 38至-1.401298E-45为负值; 1.401298E-45至3.4028235E + 38正值 |
String | 取决于实施平台 | 0到大约20亿个Unicode字符 |
UInteger | 4个字节 | 0至4294967295(无符号) |
ULONG | 8个字节 | 0至18,446,744,073,709,551,615(签名) |
User-Defined | 取决于实施平台 | 结构的每个成员具有由其数据类型确定的范围并且独立于其他成员的范围 |
UShort | 2个字节 | 0至65,535(无符号) |
下面的示例演示使用的一些类型︰
Module DataTypes Sub Main() Dim b As Byte Dim n As Integer Dim si As Single Dim d As Double Dim da As Date Dim c As Char Dim s As String Dim bl As Boolean b = 1 n = 1234567 si = 0.12345678901234566 d = 0.12345678901234566 da = Today c = "U"c s = "Me" If ScriptEngine = "VB" Then bl = True Else bl = False End If If bl Then 'the oath taking Console.Write(c & " and," & s & vbCrLf) Console.WriteLine("declaring on the day of: {0}", da) Console.WriteLine("We will learn VB.Net seriously") Console.WriteLine("Lets see what happens to the floating point variables:") Console.WriteLine("The Single: {0}, The Double: {1}", si, d) End If Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
U and, Medeclaring on the day of: 12/4/2012 12:00:00 PMWe will learn VB.Net seriouslyLets see what happens to the floating point variables:The Single:0.1234568, The Double: 0.123456789012346
VB.Net提供以下内联类型转换函数:
SN | 功能和说明 |
---|---|
1 | CBool(表达式) 将表达式转换为布尔数据类型。 |
2 | CByte(表达式) 将表达式转换为字节数据类型。 |
3 | CChar(表达式) 将表达式转换为Char数据类型。 |
4 | CDate(表达式) 将表达式转换为Date数据类型 |
5 | CDbl(表达式) 将表达式转换为双精度数据类型。 |
6 | CDec(表达式) 将表达式转换为十进制数据类型。 |
7 | CInT(表达式) 将表达式转换为整数数据类型。 |
8 | CLng函数(表达式) 将表达式转换为长数据类型。 |
9 | CObj(表达式) 将表达式转换为对象类型。 |
10 | CSByte(表达式) 将表达式转换为SByte数据类型。 |
11 | CShort(表达式) 将表达式转换为短数据类型。 |
12 | CSng函数(表达式) 将表达式转换为单一数据类型。 |
13 | CStr的(表达式) 将表达式转换为字符串数据类型。 |
14 | CUInt(表达式) 将表达式转换为UInt数据类型。 |
15 | CULng(表达式) 将表达式转换为ULng数据类型。 |
16 | CUShort(表达式) 将表达式转换为UShort数据类型。 |
下面的例子演示了其中的一些功能:
Module DataTypes Sub Main() Dim n As Integer Dim da As Date Dim bl As Boolean = True n = 1234567 da = Today Console.WriteLine(bl) Console.WriteLine(CSByte(bl)) Console.WriteLine(CStr(bl)) Console.WriteLine(CStr(da)) Console.WriteLine(CChar(CChar(CStr(n)))) Console.WriteLine(CChar(CStr(da))) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
True-1True12/4/201211
类型 | 示例 |
---|---|
Integral types | SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong and Char |
Floating point types | Single and Double |
Decimal types | Decimal |
Boolean types | True or False values, as assigned |
Date types | Date |
Dim语句用于一个或多个变量的变量声明和存储分配。 Dim语句用于模块,类,结构,过程或块级别。
[ < attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]][ ReadOnly ] Dim [ WithEvents ] variablelist
1、attributelist是适用于变量的属性列表。 可选的。
2、accessmodifier定义变量的访问级别,它具有值 - Public,Protected,Friend,Protected Friend和Private。 可选的。
3、Shared共享声明一个共享变量,它不与类或结构的任何特定实例相关联,而是可用于类或结构的所有实例。 可选的。
4、Shadows阴影表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。 可选的。
5、Static表示变量将保留其值,即使在声明它的过程终止之后。 可选的。
6、ReadOnly表示变量可以读取,但不能写入。 可选的。
7、WithEvents指定该变量用于响应分配给变量的实例引发的事件。 可选的。
8、Variablelist提供了声明的变量列表。
变量列表中的每个变量具有以下语法和部分:
variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ]
1、variablename:是变量的名称
2、boundslist:可选。 它提供了数组变量的每个维度的边界列表。
3、New:可选。 当Dim语句运行时,它创建一个类的新实例。
4、datatype:如果Option Strict为On,则为必需。 它指定变量的数据类型。
5、initializer:如果未指定New,则为可选。 创建时评估并分配给变量的表达式。
一些有效的变量声明及其定义如下所示:
Dim StudentID As IntegerDim StudentName As StringDim Salary As DoubleDim count1, count2 As IntegerDim status As BooleanDim exitButton As New System.Windows.Forms.ButtonDim lastTime, nextTime As Date
变量被初始化(赋值)一个等号,然后是一个常量表达式。 初始化的一般形式是:
variable_name = value;
例如,
Dim pi As Doublepi = 3.14159
您可以在声明时初始化变量,如下所示:
Dim StudentID As Integer = 100Dim StudentName As String = "Bill Smith"
尝试下面的例子,它使用各种类型的变量:
Module variablesNdataypes Sub Main() Dim a As Short Dim b As Integer Dim c As Double a = 10 b = 20 c = a + b Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a = 10, b = 20, c = 30
System命名空间中的控制台类提供了一个函数ReadLine,用于接受来自用户的输入并将其存储到变量中。 例如,
Dim message As Stringmessage = Console.ReadLine
下面的例子说明:
Module variablesNdataypes Sub Main() Dim message As String Console.Write("Enter message: ") message = Console.ReadLine Console.WriteLine() Console.WriteLine("Your Message: {0}", message) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果(假设用户输入的Hello World):
Enter message: Hello World Your Message: Hello World
有两种表达式:
变量是左值,因此可能出现在作业的左侧。 数字文字是右值,因此可能不会分配,不能出现在左侧。 以下是有效的语句:
Dim g As Integer = 20
但以下并不是有效的语句,并会生成编译时的错误:
20 = g
constants 常数指的是程序在执行过程中可能不会改变的固定值。 这些固定值也称为文字。
enumeration 枚举是一组命名的整数常量。
[ < attributelist> ] [ accessmodifier ] [ Shadows ] Const constantlist
1、attributelist:指定应用于常量的属性列表; 您可以提供多个属性,以逗号分隔。 可选的。
2、accessmodifier:指定哪些代码可以访问这些常量。 可选的。 值可以是:Public, Protected, Friend, Protected Friend, or Private.
3、Shadows:这使常量隐藏基类中相同名称的编程元素。 可选的。
4、Constantlist:给出声明的常量的名称列表。 必填。
其中,每个常量名都有以下语法和部分:
constantname [ As datatype ] = initializer
1、constantname 常量名:指定常量的名称
2、data type 数据类型:指定常量的数据类型
3、initializer 初始值设定:指定分配给常量的值
例如,
'The following statements declare constants.'Const maxval As Long = 4999Public Const message As String = "HELLO" Private Const piValue As Double = 3.1415
以下示例演示了常量值的声明和使用:
Module constantsNenum Sub Main() Const PI = 3.14159 Dim radius, area As Single radius = 7 area = PI * radius * radius Console.WriteLine("Area = " & Str(area)) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Area = 153.938
VB.Net提供以下打印和显示常量:
Constant | 描述 |
---|---|
vbCrLf | 回车/换行字符组合。 |
vbCr | 回车字符。 |
vbLf | 换行字符。 |
vbNewLine | 换行字符。 |
vbNullChar | 空字符。 |
vbNullString | 不等于零长度字符串(“”); 用于调用外部过程。 |
vbObjectError | 错误号。用户定义的错误号应大于此值。例如: Err.Raise(数字)= vbObjectError + 1000 |
vbTab | 标签字符。 |
vbBack | 退格字符。 |
[ < attributelist > ] [ accessmodifier ] [ Shadows ] Enum enumerationname [ As datatype ] memberlistEnd Enum
1、attributelist:指应用于变量的属性列表。 可选的。
2、asscessmodifier:指定哪些代码可以访问这些枚举。 可选的。 值可以是:公共,受保护,朋友或私人。
3、Shadows:这使枚举隐藏基类中相同名称的编程元素。 可选的。
4、enumerationname:枚举的名称。 必填
5、datatype:指定枚举的数据类型及其所有成员。
6、memberlist:指定在此语句中声明的成员常数的列表。 必填。
成员列表中的每个成员具有以下语法和部分:
[< attribute list>] member name [ = initializer ]
name 名称 :指定成员的名称。必填。
initializer 初始化 :分配给枚举成员的值。可选的。
例如,
Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7End Enum
以下示例演示了Enum变量颜色的声明和使用:
Module constantsNenum Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7 End Enum Sub Main() Console.WriteLine("The Color Red is : " & Colors.red) Console.WriteLine("The Color Yellow is : " & Colors.yellow) Console.WriteLine("The Color Blue is : " & Colors.blue) Console.WriteLine("The Color Green is : " & Colors.green) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The Color Red is: 1The Color Yellow is: 3The Color Blue is: 6The Color Green is: 4
下表提供了VB.Net修饰符的完整列表:
S.N | 修饰符 | 描述 |
---|---|---|
1 | Ansi | 指定Visual Basic应该将所有字符串编组到美国国家标准协会(ANSI)值,而不考虑正在声明的外部过程的名称。 |
2 | Assembly | 指定源文件开头的属性适用于整个程序集。 |
3 | Async | 表示它修改的方法或lambda表达式是异步的。 这样的方法被称为异步方法。 异步方法的调用者可以恢复其工作,而不必等待异步方法完成。 |
4 | Auto | 在外部过程的调用期间,十进制中的chchetetmodifierpart提供用于编组字符串的字符集信息。 它还会影响Visual Basic如何在外部文件中搜索外部过程名称。 Auto修饰符指定Visual Basic应根据.NET Framework规则编组字符串。 |
5 | ByRef | 指定参数通过引用传递,即被调用过程可以更改调用代码中参数下面的变量的值。 它在下列语境下使用:
|
6 | BYVAL | 指定传递参数时,调用过程或属性不能更改调用代码中参数下面的变量的值。 它在下列语境下使用:
|
7 | Default | 标识属性作为它的类、 结构或接口的默认属性。 |
8 | Friend | 指定一个或多个声明的编程元素可以从包含其声明的程序集中访问,而不仅仅是声明它们的组件。 Friendaccess通常是应用程序编程元素的首选级别,Friend是接口,模块,类或结构的默认访问级别。
|
9 | In | 它用于通用接口和代理。 |
10 | Iterator | 指定函数或Get访问器是迭代器。 Aniterator对集合执行自定义迭代。 |
11 | Key | Key关键字使您能够为匿名类型的属性指定行为。 |
12 | Module | 指定源文件开头的属性适用于当前装配模块。 它与Module语句不同。 |
13 | MustInherit | 指定一个类只能用来作为基类,并且你不能直接创建一个对象。 |
14 | MustOverride | 指定属性或过程未在此类中实现,必须在导出类中重写,然后才能使用。 |
15 | Narrowing | 表示转换运算符(CType)将类或结构转换为可能不能保存原始类或结构的某些可能值的类型。 |
16 | NotInheritable | 指定类不能用作基类。 |
17 | NotOverridable | 指定不能在派生类中重写属性或过程。 |
18 | Optional | 指定当程序被调用的过程参数可以被省略。 |
19 | Out | 对于通用类型参数,Out关键字指定类型是协变的。 |
20 | Overloads | 指定属性或过程重新声明具有相同名称的一个或多个现有属性或过程。 |
21 | Overridable | 指定属性或过程可以由派生类中具有相同名称的属性或过程覆盖。 |
22 | Overrides | 指定属性或过程覆盖从基类继承的命名相同的属性或过程。 |
23 | ParamArray | ParamArray允许您将任意数量的参数传递给过程。 ParamArray参数始终使用ByVal声明。 |
24 | Partial | 表示类或结构声明是类或结构的部分定义。 |
25 | Private | 指定一个或多个声明的编程元素只能在其声明上下文中访问,包括来自任何包含的类型。 |
26 | Protected | 指定一个或多个声明的编程元素只能从其自己的类或派生类中访问。 |
27 | Public | 指定一个或多个声明的编程元素没有访问限制。 |
28 | ReadOnly | 指定可以读取但不写入变量或属性。 |
29 | Shadows | 指定声明的编程元素在基类中重新声明和隐藏相同命名的元素或一组重载的元素。 |
30 | Shared | 指定一个或多个声明的编程元素与类或结构(而不是类或结构的特定实例)关联。 |
31 | Static | 指定一个或多个已声明的局部变量将继续存在,并在声明它们的过程终止后保留其最新值。 |
32 | Unicode | 指定Visual Basic应将所有字符串编组为Unicode值,而不考虑正在声明的外部过程的名称。 |
33 | Widening | 表示转换运算符(CType)将类或结构转换为可以保存原始类或结构的所有可能值的类型。 |
34 | WithEvents | 指定一个或多个声明的成员变量引用可以引发事件的类的实例。 |
35 | WriteOnly | 指定可以写入但不读取属性。 |
statement 声明是Visual Basic程序中的完整指令。 它可以包含关键字,运算符,变量,字面值,常量和表达式。
2、Executable statements 可执行语句 - 这些是启动动作的语句。 这些语句可以调用方法或函数,通过代码块循环或分支,或者将值或表达式赋值给变量或常量。 在最后一种情况下,它被称为Assignment语句。
S.N | 声明和说明 | 示例 |
---|---|---|
1 | Dim Statement Dim语句 Declares and allocates storage space for one or more variables. 声明和分配一个或多个变量的存储空间。 | Dim number As IntegerDim quantity As Integer = 100Dim message As String = "Hello!" |
2 | Const Statement Const语句 Declares and defines one or more constants. 声明和定义一个或多个常量。 | Const maximum As Long = 1000Const naturalLogBase As Object = CDec(2.7182818284) |
3 | Enum Statement 枚举语句 Declares an enumeration and defines the values of its members. 声明一个枚举并定义其成员的值。 | Enum CoffeeMugSize Jumbo ExtraLarge Large Medium SmallEnd Enum |
4 | Class Statement 类语句 Declares the name of a class and introduces the definition of the variables, properties, events, and procedures that the class comprises. 声明类的名称,并引入该类包含的变量,属性,事件和过程的定义。 | Class BoxPublic length As DoublePublic breadth As Double Public height As DoubleEnd Class |
5 | Structure Statement 结构声明 Declares the name of a structure and introduces the definition of the variables, properties, events, and procedures that the structure comprises. 声明结构的名称,并引入结构所包含的变量,属性,事件和过程的定义。 | Structure BoxPublic length As Double Public breadth As Double Public height As DoubleEnd Structure |
6 | Module Statement 模块语句 Declares the name of a module and introduces the definition of the variables, properties, events, and procedures that the module comprises. 声明模块的名称,并介绍模块包含的变量,属性,事件和过程的定义。 | Public Module myModuleSub Main()Dim user As String = InputBox("What is your name?") MsgBox("User name is" & user)End Sub End Module |
7 | Interface Statement 接口语句Declares the name of an interface and introduces the definitions of the members that the interface comprises. 声明接口的名称,并介绍接口包含的成员的定义。 | Public Interface MyInterface Sub doSomething()End Interface |
8 | Function Statement 函数语句 Declares the name, parameters, and code that define a Function procedure. 声明定义函数过程的名称,参数和代码。 | Function myFunction(ByVal n As Integer) As Double Return 5.87 * nEnd Function |
9 | Sub Statement 子语句 Declares the name, parameters, and code that define a Sub procedure. 声明定义Sub过程的名称,参数和代码。 | Sub mySub(ByVal s As String) ReturnEnd Sub |
10 | Declare Statement 声明语句 Declares a reference to a procedure implemented in an external file. 声明对在外部文件中实现的过程的引用。 | Declare Function getUserNameLib "advapi32.dll" Alias "GetUserNameA" ( ByVal lpBuffer As String, ByRef nSize As Integer) As Integer |
11 | Operator Statement 运算符声明 Declares the operator symbol, operands, and code that define an operator procedure on a class or structure. 声明的运算符符号、 操作数和在类或结构定义一个运算符过程的代码。 | Public Shared Operator +(ByVal x As obj, ByVal y As obj) As obj Dim r As New obj' implemention code for r = x + y Return r End Operator |
12 | Property Statement 属性声明 Declares the name of a property, and the property procedures used to store and retrieve the value of the property. 声明属性的名称,以及用于存储和检索属性值的属性过程。 | ReadOnly Property quote() As String Get Return quoteString End Get End Property |
13 | Event Statement 事件声明 Declares a user-defined event. 声明用户定义的事件。 | Public Event Finished() |
14 | Delegate Statement 委托声明 Used to declare a delegate. 用于声明一个委托。 | Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double |
以下示例演示了一个决策语句:
Module decisions Sub Main() 'local variable definition ' Dim a As Integer = 10 ' check the boolean condition using if statement ' If (a < 20) Then ' if condition is true then print the following ' Console.WriteLine("a is less than 20") End If Console.WriteLine("value of a is : {0}", a) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a is less than 20;value of a is : 10
VB.Net编译器没有单独的预处理器; 然而,指令被处理,就像有一个。 在VB.Net中,编译器指令用于帮助条件编译。 与C和C ++指令不同,它们不用于创建宏。
VB.Net提供了以下一组编译器指令:
The #Const 指令
The #ExternalSource 指令
The #If...Then...#Else 指令
The #Region 指令
该指令定义条件编译常量。语法这个指令是:
#Const constname = expression
constname:指定常量的名称。必要。
expression :它是文字或其他条件编译器常量,或包含任何或所有算术或逻辑运算符(除了Is)的组合。
例如,
#Const state = "WEST BENGAL"
示例
以下代码演示了伪指令的使用:
Module mydirectives#Const age = TrueSub Main() #If age Then Console.WriteLine("You are welcome to the Robotics Club") #End If Console.ReadKey()End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
You are welcome to the Robotics Club
#ExternalSource( StringLiteral , IntLiteral ) [ LogicalLine ]#End ExternalSource
#ExternalSource伪指令的参数是外部文件的路径,第一行的行号和发生错误的行。
示例
以下代码演示了伪指令的使用:
Module mydirectives Public Class ExternalSourceTester Sub TestExternalSource() #ExternalSource("c:vbprogsdirectives.vb", 5) Console.WriteLine("This is External Code. ") #End ExternalSource End Sub End Class Sub Main() Dim t As New ExternalSourceTester() t.TestExternalSource() Console.WriteLine("In Main.") Console.ReadKey() End Sub
当上述代码被编译和执行时,它产生了以下结果:
This is External Code.In Main.
#If expression Then statements[ #ElseIf expression Then [ statements ]...#ElseIf expression Then [ statements ] ][ #Else [ statements ] ]#End If
例如,
#Const TargetOS = "Linux"#If TargetOS = "Windows 7" Then ' Windows 7 specific code#ElseIf TargetOS = "WinXP" Then ' Windows XP specific code#Else ' Code for other OS#End if
示例
下面的代码演示一个假设使用的指令:
Module mydirectives#Const classCode = 8 Sub Main() #If classCode = 7 Then Console.WriteLine("Exam Questions for Class VII") #ElseIf classCode = 8 Then Console.WriteLine("Exam Questions for Class VIII") #Else Console.WriteLine("Exam Questions for Higher Classes") #End If Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Exam Questions for Class VIII
#Region "identifier_string" #End Region
例如,
#Region "StatsFunctions" ' Insert code for the Statistical functions here.#End Region
运算符是一个符号,通知编译器执行特定的数学或逻辑操作。 VB.Net丰富的内置运算符,并提供以下类型的常用运算符:
算术运算符
比较运算符
逻辑/位运算符
位移位运算符
赋值运算符
其他运算符
本教程将介绍最常用的运算符。
下表显示了VB.Net支持的所有算术运算符。 假设变量A保持2,变量B保持7,则:
运算符 | 描述 | 例 |
---|---|---|
^ | 将一个操作数作为为另一个的幂 | B^A will give 49 |
+ | 添加两个操作数s | A + B will give 9 |
- | 从第一个操作数中减去第二个操作数 | A - B will give -5 |
* | 将两个操作数相乘 | A * B will give 14 |
/ | 将一个操作数除以另一个操作数,并返回一个浮点结果 | B / A will give 3.5 |
将一个操作数除以另一个操作数,并返回一个整数结果 | B A will give 3 | |
MOD | 模数运算符和整数除法后的余数 | B MOD A will give 1 |
下表显示了VB.Net支持的所有比较运算符。 假设变量A保持10,变量B保持20,则:
运算符 | 描述 | 例 |
---|---|---|
= | 检查两个操作数的值是否相等; 如果是,则结果变为真。 | (A = B)是不正确的。 |
<> | 检查两个操作数的值是否相等; 如果值不相等,则结果为真。 | (A<>B)为真。 |
> | 检查左操作数的值是否大于右操作数的值; 如果是,则结果变为真。 | (A> B)是不正确的。 |
< | 检查左操作数的值是否小于右操作数的值; 如果是,则结果变为真。 | (A <B)为真。 |
> = | 检查左操作数的值是否大于或等于右操作数的值; 如果是,则结果变为真。 | (A> = B)是不正确的。 |
<= | 检查左操作数的值是否小于或等于右操作数的值; 如果是,则结果变为真。 | (A <= B)为真。 |
下表显示了VB.Net支持的所有逻辑运算符。 假设变量A保持布尔值True,变量B保持布尔值False,则:
运算符 | 描述 | 例 |
---|---|---|
And | 它是逻辑以及按位AND运算符。 如果两个操作数都为真,则条件为真。 此运算符不执行短路,即,它评估两个表达式。 | (A和B)为假。 |
Or | 它是逻辑以及按位或运算符。 如果两个操作数中的任何一个为真,则条件为真。 此运算符不执行短路,即,它评估两个表达式。 | (A或B)为真。 |
Not | 它是逻辑以及按位非运算符。 用于反转其操作数的逻辑状态。 如果条件为真,则逻辑非运算符将为假。 | 没有(A和B)为真。 |
Xor | 它是逻辑以及按位逻辑异或运算符。 如果两个表达式都为True或两个表达式都为False,则返回True; 否则返回False。 该运算符不会执行短路,它总是评估这两个表达式,并且没有该运算符的短路对应。 | 异或B为真。 |
AndAlso | 它是逻辑 AND 运算符。它仅适用于布尔型数据。它执行短路。 | (A AndAlso运算B)为假。 |
OrElse | 它是逻辑或运算符。 它只适用于布尔数据。 它执行短路。 | (A OrElse运算B)为真。 |
IsFalse | 它确定表达式是否为假。 | |
IsTrue | 它确定表达式是否为真。 |
p | q | p&Q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设A = 60; 和B = 13; 现在的二进制格式,他们将如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
〜A = 1100 0011
运算符 | 描述 | 示例 |
---|---|---|
And | 如果两个操作数都存在,则按位AND运算符将一个位复制到结果。 | (A AND B) will give 12, which is 0000 1100 |
Or | 二进制OR运算符复制一个位,如果它存在于任一操作数。 | (A Or B) will give 61, which is 0011 1101 |
Xor | 二进制XOR运算符复制该位,如果它在一个操作数中设置,但不是两个操作数。 | (A Xor B) will give 49, which is 0011 0001 |
Not | 二进制补码运算符是一元的,具有“翻转”位的效果。 | (Not A ) will give -61, which is 1100 0011 in 2's complement form due to a signed binary number. |
<< | 二进制左移位运算符。 左操作数值向左移动由右操作数指定的位数。 | A << 2 will give 240, which is 1111 0000 |
>> | 二进制右移运算符。 左操作数值向右移动由右操作数指定的位数。 | A >> 2 will give 15, which is 0000 1111 |
运算符 | 描述 | 例 |
---|---|---|
= | 简单赋值操作符,将值从右侧操作数分配给左侧操作数 | C = A + B A + B将赋值为C |
+ = | 添加AND赋值运算符,向左操作数添加右操作数,并将结果赋值给左操作数 | C + = A等于C = C + A |
- = | 减法AND赋值运算符,它从左操作数中减去右操作数,并将结果赋值给左操作数 | Ç - = A等于C = C - A |
* = | 乘法AND赋值运算符,它将右操作数与左操作数相乘,并将结果赋值给左操作数 | C * = A等于C = C * A |
/ = | 除法AND赋值运算符,它用右操作数划分左操作数,并将结果分配给左操作数(浮点除法) | C / = A等于C = C / A |
= | 除法AND赋值运算符,它用右操作数划分左操作数,并将结果分配给左操作数(整数除法) | ç = A等于C = C A |
^ = | 指数和赋值运算符。 它将左操作数提升为右操作数的幂,并将结果分配给左操作数。 | C ^ = A等于C = C ^ A |
<< = | 左移AND赋值运算符 | C语言的<< = 2是同C = C << 2 |
>> = | 右移AND赋值运算符 | C >> = 2 >> 2同C = C |
&= | 将String表达式连接到String变量或属性,并将结果分配给变量或属性。 | STR1&= STR2赛车是一样的 STR1 = STR1与STR2 |
有很少其他重要的操作系统支持VB.Net。
运算符 | 描述 | 例 |
---|---|---|
AddressOf | 返回过程的地址。 | AddHandler Button1.Click,AddressOf Button1_Click |
Await | 它应用于异步方法或lambda表达式中的操作数,以暂停该方法的执行,直到等待的任务完成。 | Dim result As res= Await AsyncMethodThatReturnsResult()Await AsyncMethod() |
GetType | 它返回指定类型的Type对象。 Type对象提供有关类型的信息,例如其属性,方法和事件。 | MsgBox(GetType(Integer).ToString()) |
Function Expression | 它声明定义函数lambda表达式的参数和代码。 | Dim add5 = Function(num As Integer) num + 5'prints 10Console.WriteLine(add5(5)) |
If | 它使用短路评估有条件地返回两个值之一。 可以使用三个参数或两个参数调用If运算符。 | Dim num = 5Console.WriteLine(If(num >= 0,"Positive", "Negative")) |
运算符优先级确定表达式中的术语分组。 这会影响表达式的计算方式。 某些运算符比其他运算符具有更高的优先级; 例如,乘法运算符的优先级高于加法运算符:
例如,x = 7 + 3 * 2; 这里,x被分配13,而不是20,因为operator *具有比+高的优先级,所以它首先乘以3 * 2,然后加到7。
这里,具有最高优先级的运算符出现在表的顶部,具有最低优先级的运算符出现在底部。 在表达式中,将首先计算较高优先级运算符。
运算符 | 优先级 |
---|---|
Await | 最高 |
Exponentiation (^) | |
Unary identity and negation (+, -) | |
Multiplication and floating-point division (*, /) | |
Integer division () | |
Modulus arithmetic (Mod) | |
Addition and subtraction (+, -) | |
Arithmetic bit shift (<<, >>) | |
All comparison operators (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is) | |
Negation (Not) | |
Conjunction (And, AndAlso) | |
Inclusive disjunction (Or, OrElse) | |
Exclusive disjunction (Xor) | 最低 |
决策结构需要 程序员指定一个或多个条件进行评估或测试程序和语句或语句的执行, 如果确定的条件为真,并选择,如果确定的条件为假,则执行其它语句。
以下是决策的典型结构发现在大多数编程语言的一般形式︰
VB.Net 提供以下类型的决策语句。
单击以下链接以检查其详细信息。
声明 | 描述 |
---|---|
If ... Then statement | An If...Then statement consists of a boolean expression followed by one or more statements. 一个If...Then语句由一个布尔表达式后跟一个或多个语句组成。 |
If...Then...Else statement | An If...Then statement can be followed by an optional Else statement, which executes when the boolean expression is false. 一个If...Then语句后面可以是一个可选的Else语句 ,当布尔表达式为假时执行。 |
nested If statements | You can use one If or Else if statement inside another If or Else if statement(s). 您可以在一个if或else if语句中使用If或Else if语句。 |
Select Case statement | You can use one If or Else if statement inside another If or Else if statement(s). Select Case语句允许根据值列表测试变量的相等性。 |
nested Select Case statements | You can use one select case statement inside another select case statement(s). 您可以使用一个select case语句中使用一个 select case语句。 |
可能有一种情况,当你需要执行一段代码几次。
一般来说,语句是按顺序执行的:函数中的第一个语句首先执行,然后是第二个语句,依此类推。
编程语言提供允许更复杂的执行路径的各种控制结构。
循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式:
VB.Net 提供以下类型的循环来处理循环需求。 单击以下链接以检查其详细信息。
循环类型 | 描述 |
---|---|
It repeats the enclosed block of statements while a Boolean condition is True or until the condition becomes True. It could be terminated at any time with the Exit Do statement. 它重复包含的语句块内布尔条件为 True 或直到条件变为 True 。 它可以随时使用 Exit Do 语句终止。 | |
It repeats a group of statements a specified number of times and a loop index counts the number of loop iterations as the loop executes. 它重复指定次数的一组语句,循环索引计算循环执行时的循环迭代数。 | |
It repeats a group of statements for each element in a collection. This loop is used for accessing and manipulating all elements in an array or a VB.Net collection. 它为集合中的每个元素重复一组语句。 这个循环用于访问和操作数组或 VB.Net 集合中的所有元素。 | |
It executes a series of statements as long as a given condition is True. 只要给定条件为 True ,它就执行一系列语句。 | |
It is not exactly a looping construct. It executes a series of statements that repeatedly refer to a single object or structure. 它不是一个循环结构。 它执行一系列重复引用单个对象或结构的语句。 | |
You can use one or more loops inside any another While, For or Do loop. 您可以在任何其他 While ,For 或 Do 循环中使用一个或多个循环。 |
循环控制语句从其正常序列改变执行。 当执行离开作用域时,在该作用域中创建的所有自动对象都将被销毁。
VB.Net 提供以下控制语句。 单击以下链接以检查其详细信息。
控制语句 | 描述 |
---|---|
Terminates the loop or select case statement and transfers execution to the statement immediately following the loop or select case. 终止循环或选择大小写语句,并将执行转移到循环或选择大小之后的语句。 | |
Causes the loop to skip the remainder of its body and immediately retest its condition prior to reiterating. 导致循环跳过其本身的其余部分,并在重复之前立即重新测试其状态。 | |
Transfers control to the labeled statement. Though it is not advised to use GoTo statement in your program. 将控制转移到带标签的语句。 虽然不建议在程序中使用 |
在VB.Net中,可以使用字符串作为字符数组,但是更常见的做法是使用String关键字声明一个字符串变量。 string关键字是System.String类的别名。
您可以使用以下方法之一创建字符串对象:
By assigning a string literal to a String variable 通过指定一个字符串给一个字符串变量
By using a String class constructor 通过使用String类构造函数
By using the string concatenation operator (+) 通过使用字符串连接运算符(+)
By retrieving a property or calling a method that returns a string 通过检索属性或调用返回字符串的方法
By calling a formatting method to convert a value or object to its string representation
通过调用格式化方法将值或对象转换为其字符串表示形式
下面的例子说明了这一点:
Module strings Sub Main() Dim fname, lname, fullname, greetings As String fname = "Rowan" lname = "Atkinson" fullname = fname + " " + lname Console.WriteLine("Full Name: {0}", fullname) 'by using string constructor Dim letters As Char() = {"H", "e", "l", "l", "o"} greetings = New String(letters) Console.WriteLine("Greetings: {0}", greetings) 'methods returning String Dim sarray() As String = {"Hello", "From", "Tutorials", "Point"} Dim message As String = String.Join(" ", sarray) Console.WriteLine("Message: {0}", message) 'formatting method to convert a value Dim waiting As DateTime = New DateTime(2012, 12, 12, 17, 58, 1) Dim chat As String = String.Format("Message sent at {0:t} on {0:D}", waiting) Console.WriteLine("Message: {0}", chat) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Full Name: Rowan AtkinsonGreetings: HelloMessage: Hello From Tutorials PointMessage: Message sent at 5:58 PM on Wednesday, December 12, 2012
String类有以下两个属性:
SN | 属性名称和说明 |
---|---|
1 | Chars 获取当前String对象中指定位置的Char对象。 |
2 | Length 获取当前String对象中的字符数。 |
String类有许多方法可以帮助你处理字符串对象。 下表提供了一些最常用的方法:
SN | 方法名称和说明 |
---|---|
1 | Public Shared Function Compare ( strA As String, strB As String ) As Integer 比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。 |
2 | Public Shared Function Compare ( strA As String, strB As String, ignoreCase As Boolean ) As Integer 比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。 但是,如果布尔参数为true,它将忽略大小写。 |
3 | Public Shared Function Concat ( str0 As String, str1 As String ) As String 连接两个字符串对象。 |
4 | Public Shared Function Concat ( str0 As String, str1 As String, str2 As String ) As String 连接三个字符串对象。 |
5 | Public Shared Function Concat ( str0 As String, str1 As String, str2 As String, str3 As String ) As String公共共享函数Concat(str0 As String,str1 As String,str2 As String,str3 As String)As String 连接四个字符串对象。 |
6 | Public Function Contains ( value As String ) As Boolean 返回一个值,指示指定的字符串对象是否出现在此字符串中。 |
7 | Public Shared Function Copy ( str As String ) As String 创建与指定字符串具有相同值的新String对象。 |
8 | pPublic Sub CopyTo ( sourceIndex As Integer, destination As Char(), destinationIndex As Integer, count As Integer ) 将指定数量的字符从字符串对象的指定位置复制到Unicode字符数组中的指定位置。 |
9 | Public Function EndsWith ( value As String ) As Boolean 确定字符串对象的结尾是否与指定的字符串匹配。 |
10 | Public Function Equals ( value As String ) As Boolean 确定当前字符串对象,并指定字符串对象是否具有相同的值。 |
11 | Public Shared Function Equals ( a As String, b As String ) As Boolean 确定两个指定字符串对象是否具有相同的值。 |
12 | Public Shared Function Format ( format As String, arg0 As Object ) As String 将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式。 |
13 | Public Function IndexOf ( value As Char ) As Integer 返回当前字符串中指定Unicode字符第一次出现的从零开始的索引。 |
14 | Public Function IndexOf ( value As String ) As Integer 返回此实例中指定字符串第一次出现的从零开始的索引。 |
15 | Public Function IndexOf ( value As Char, startIndex As Integer ) As Integer 返回此字符串中指定Unicode字符第一次出现的从零开始的索引,从指定的字符位置开始搜索。 |
16 | Public Function IndexOf ( value As String, startIndex As Integer ) As Integer 返回此实例中指定字符串第一次出现的从零开始的索引,开始在指定的字符位置搜索。 |
17 | Public Function IndexOfAny ( anyOf As Char() ) As Integer 返回在指定的Unicode字符数组中的任何字符的此实例中第一次出现的从零开始的索引。 |
18 | Public Function IndexOfAny ( anyOf As Char(), startIndex As Integer ) As Integer 返回在指定的Unicode字符数组中的任意字符的此实例中第一次出现的从零开始的索引,开始在指定的字符位置搜索。 |
19 | Public Function Insert ( startIndex As Integer, value As String ) As String 返回一个新字符串,其中指定的字符串插入到当前字符串对象中指定的索引位置。 |
20 | Public Shared Function IsNullOrEmpty ( value As String ) As Boolean 指示指定的字符串是空还是空字符串。 |
21 | Public Shared Function Join ( separator As String, ParamArray value As String() ) As String 连接字符串数组的所有元素,使用每个元素之间指定的分隔符。 |
22 | Public Shared Function Join ( separator As String, value As String(), startIndex As Integer, count As Integer ) As String 使用每个元素之间指定的分隔符连接字符串数组的指定元素。 |
23 | Public Function LastIndexOf ( value As Char ) As Integer 返回当前字符串对象中指定Unicode字符的最后一次出现的从零开始的索引位置。 |
24 | Public Function LastIndexOf ( value As String ) As Integer 返回当前字符串对象中指定字符串的最后一次出现的从零开始的索引位置。 |
25 | Public Function Remove ( startIndex As Integer )As String 删除当前实例中的所有字符,从指定位置开始,并继续到最后一个位置,并返回字符串。 |
26 | Public Function Remove ( startIndex As Integer, count As Integer ) As String 从指定位置开始删除当前字符串中指定数量的字符,并返回字符串。 |
27 | Public Function Replace ( oldChar As Char, newChar As Char ) As String 用指定的Unicode字符替换当前字符串对象中指定Unicode字符的所有出现,并返回新字符串。 |
28 | Public Function Replace ( oldValue As String, newValue As String ) As String 将当前字符串对象中指定字符串的所有出现替换为指定的字符串,并返回新字符串。 |
29 | Public Function Split ( ParamArray separator As Char() ) As String() 返回一个字符串数组,其中包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。 |
30 | Public Function Split ( separator As Char(), count As Integer ) As String() 返回一个字符串数组,其中包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。 int参数指定要返回的子字符串的最大数目。 |
31 | Public Function StartsWith ( value As String ) As Boolean 确定此字符串实例的开头是否与指定的字符串匹配。 |
32 | Public Function ToCharArray As Char() 返回包含当前字符串对象中所有字符的Unicode字符数组。 |
33 | Public Function ToCharArray ( startIndex As Integer, length As Integer ) As Char() 返回一个Unicode字符数组,其中包含当前字符串对象中的所有字符,从指定的索引开始,直到指定的长度。 |
34 | Public Function ToLower As String 返回此字符串的转换为小写的副本。 |
35 | Public Function ToUpper As String 返回此字符串的转换为大写的副本。 |
36 | Public Function Trim As String 从当前String对象中删除所有前导和尾部空格字符。 |
上面列出的方法并不详尽,请访问MSDN库获取完整的方法列表和String类构造函数。
下面的例子说明了上述一些方法:
比较字符串:
Module strings Sub Main() Dim str1, str2 As String str1 = "This is test" str2 = "This is text" If (String.Compare(str1, str2) = 0) Then Console.WriteLine(str1 + " and " + str2 + " are equal.") Else Console.WriteLine(str1 + " and " + str2 + " are not equal.") End If Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
This is test and This is text are not equal.
字符串包含字符串:
Module strings Sub Main() Dim str1 As String str1 = "This is test" If (str1.Contains("test")) Then Console.WriteLine("The sequence 'test' was found.") End If Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The sequence 'test' was found.
获取的子字符串:
Module strings Sub Main() Dim str As String str = "Last night I dreamt of San Pedro" Console.WriteLine(str) Dim substr As String = str.Substring(23) Console.WriteLine(substr) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Last night I dreamt of San PedroSan Pedro.
加入字符串:
Module strings Sub Main() Dim strarray As String() = {"Down the way where the nights are gay", "And the sun shines daily on the mountain top", "I took a trip on a sailing ship", "And when I reached Jamaica", "I made a stop"} Dim str As String = String.Join(vbCrLf, strarray) Console.WriteLine(str) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Down the way where the nights are gayAnd the sun shines daily on the mountain topI took a trip on a sailing shipAnd when I reached JamaicaI made a stop
你写的大部分软件都需要实现某种形式的日期功能,返回当前日期和时间。日期是日常生活的一部分,使用它能让工作变得轻松,不需要太多思考。 VB.Net还提供了强大的日期算术工具,使操作日期变得容易。
日期数据类型包含日期值,时间值或日期和时间值。 Date的默认值为0001年1月1日的0:00:00(午夜)。等效的.NET数据类型为System.DateTime。
DateTime 结构表示即时时间,通常表示为日期和时间的一天
'Declaration<SerializableAttribute> _Public Structure DateTime _ Implements IComparable, IFormattable, IConvertible, ISerializable, IComparable(Of DateTime), IEquatable(Of DateTime)
您还可以从DateAndTime类获取当前日期和时间。
DateAndTime模块包含日期和时间操作中使用的过程和属性。
'Declaration<StandardModuleAttribute> _Public NotInheritable Class DateAndTime
注意: DateTime结构和DateAndTime模块都包含诸如Now和Today之类的属性,因此初学者经常会感到困惑。 DateAndTime类属于Microsoft.VisualBasic命名空间,DateTime结构属于System命名空间。
|
下表列出了一些DateTime结构的常用属性 :
S.N | 属性 | 描述 |
---|---|---|
1 | Date | Gets the date component of this instance. 获取此实例的日期组件。 |
2 | Day | Gets the day of the month represented by this instance. 获取此实例所代表的月份中的某一天。 |
3 | DayOfWeek | Gets the day of the week represented by this instance. 获取此实例表示的星期几。 |
4 | DayOfYear | Gets the day of the year represented by this instance. 获取此实例表示的一年中的某一天。 |
5 | Hour | Gets the hour component of the date represented by this instance. 获取此实例表示的日期的小时组件。 |
6 | Kind | Gets a value that indicates whether the time represented by this instance is based on local time, Coordinated Universal Time (UTC), or neither.G 获取一个值,该值指示此实例表示的时间是基于本地时间,协调世界时间(UTC)还是两者都不是。 |
7 | Millisecond | Gets the milliseconds component of the date represented by this instance. 获取此实例表示的日期的毫秒组件。 |
8 | Minute | Gets the minute component of the date represented by this instance. 获取此实例表示的日期的分钟分量。 |
9 | Month | Gets the month component of the date represented by this instance. 获取此实例表示的日期的月份。 |
10 | Now | Gets a DateTime object that is set to the current date and time on this computer, expressed as the local time. 获取在此计算机上设置为当前日期和时间的DateTime对象,以本地时间表示。 |
11 | Second | Gets the seconds component of the date represented by this instance. 获取此实例表示的日期的秒组件。 |
12 | Ticks | Gets the number of ticks that represent the date and time of this instance. 获取表示此实例的日期和时间的刻度数。 |
13 | TimeOfDay | Gets the time of day for this instance. 获取此实例的时间。 |
14 | Today | Gets the current date. 获取当前日期。 |
15 | UtcNow | Gets a DateTime object that is set to the current date and time on this computer, expressed as the Coordinated Universal Time (UTC). 获取设置为此计算机上当前日期和时间的DateTime对象,以协调世界时(UTC)表示。 |
16 | Year | Gets the year component of the date represented by this instance. 获取此实例表示的日期的年份组件。 |
下表列出了DateTime结构的一些常用方法:
SN | 方法名称和说明 |
---|---|
1 | Public Function Add (value As TimeSpan) As DateTime 返回一个新的DateTime,将指定的TimeSpan的值添加到此实例的值。 |
2 | Public Function AddDays ( value As Double) As DateTime 返回一个新的DateTime,该值将指定的天数添加到此实例的值中。 |
3 | Public Function AddHours (value As Double) As DateTime 返回一个新的DateTime,该值将指定的小时数添加到此实例的值中。 |
4 | Public Function AddMinutes (value As Double) As DateTime 返回一个新的DateTime,将指定的分钟数添加到此实例的值。 |
5 | Public Function AddMonths (months As Integer) As DateTime 返回一个新的DateTime,将指定的月数添加到此实例的值。 |
6 | Public Function AddSeconds (value As Double) As DateTime 返回一个新的DateTime,将指定的秒数添加到此实例的值。 |
7 | Public Function AddYears (value As Integer ) As DateTime 返回一个新的DateTime,将指定的年数添加到此实例的值。 |
8 | Public Shared Function Compare (t1 As DateTime,t2 As DateTime) As Integer 比较两个DateTime实例,并返回一个整数,指示第一个实例是早于,与第二个实例相同还是晚于第二个实例。 |
9 | Public Function CompareTo (value As DateTime) As Integer 将此实例的值与指定的DateTime值进行比较,并返回一个整数,指示此实例是早于,等于还是晚于指定的DateTime值。 |
10 | Public Function Equals (value As DateTime) As Boolean 返回一个值,表示此实例的值是否等于指定的DateTime实例的值。 |
11 | Public Shared Function Equals (t1 As DateTime, t2 As DateTime) As Boolean 返回一个值,指示两个DateTime实例是否具有相同的日期和时间值。 |
12 | Public Overrides Function ToString As String 将当前DateTime对象的值转换为其等效字符串表示形式。 |
以上列出的方法并不详尽,请访问微软的文档以获取DateTime结构的方法和属性的完整列表。
您可以通过以下方式之一创建DateTime对象:
By calling a DateTime constructor from any of the overloaded DateTime constructors.通过从任何重载的DateTime构造函数调用DateTime构造函数。
By assigning the DateTime object a date and time value returned by a property or method.
通过为DateTime对象分配属性或方法返回的日期和时间值。
By parsing the string representation of a date and time value.
通过解析日期和时间值的字符串表示。
By calling the DateTime structure's implicit default constructor.
通过调用DateTime结构的隐式默认构造函数。
下面的例子说明了这一点:
Module Module1 Sub Main() 'DateTime constructor: parameters year, month, day, hour, min, sec Dim date1 As New Date(2012, 12, 16, 12, 0, 0) 'initializes a new DateTime value Dim date2 As Date = #12/16/2012 12:00:52 AM# 'using properties Dim date3 As Date = Date.Now Dim date4 As Date = Date.UtcNow Dim date5 As Date = Date.Today Console.WriteLine(date1) Console.WriteLine(date2) Console.WriteLine(date3) Console.WriteLine(date4) Console.WriteLine(date5) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
12/16/2012 12:00:00 PM12/16/2012 12:00:52 PM12/12/2012 10:22:50 PM12/12/2012 12:00:00 PM
以下程序演示如何获取VB.Net中的当前日期和时间:
当前时间:
Module dateNtime Sub Main() Console.Write("Current Time: ") Console.WriteLine(Now.ToLongTimeString) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Current Time: 11 :05 :32 AM
当前日期:
Module dateNtime Sub Main() Console.WriteLine("Current Date: ") Dim dt As Date = Today Console.WriteLine("Today is: {0}", dt) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Today is: 12/11/2012 12:00:00 AM
Module dateNtime Sub Main() Console.WriteLine("India Wins Freedom: ") Dim independenceDay As New Date(1947, 8, 15, 0, 0, 0) ' Use format specifiers to control the date display. Console.WriteLine(" Format 'd:' " & independenceDay.ToString("d")) Console.WriteLine(" Format 'D:' " & independenceDay.ToString("D")) Console.WriteLine(" Format 't:' " & independenceDay.ToString("t")) Console.WriteLine(" Format 'T:' " & independenceDay.ToString("T")) Console.WriteLine(" Format 'f:' " & independenceDay.ToString("f")) Console.WriteLine(" Format 'F:' " & independenceDay.ToString("F")) Console.WriteLine(" Format 'g:' " & independenceDay.ToString("g")) Console.WriteLine(" Format 'G:' " & independenceDay.ToString("G")) Console.WriteLine(" Format 'M:' " & independenceDay.ToString("M")) Console.WriteLine(" Format 'R:' " & independenceDay.ToString("R")) Console.WriteLine(" Format 'y:' " & independenceDay.ToString("y")) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
India Wins Freedom:Format 'd:' 8/15/1947Format 'D:' Friday, August 15, 1947Format 't:' 12:00 AMFormat 'T:' 12:00:00 AMFormat 'f:' Friday, August 15, 1947 12:00 AMFormat 'F:' Friday, August 15, 1947 12:00:00 AMFormat 'g:' 8/15/1947 12:00 AMFormat 'G:' 8/15/1947 12:00:00 AMFormat 'M:' 8/15/1947 August 15Format 'R:' Fri, 15 August 1947 00:00:00 GMTFormat 'y:' August, 1947
下表列出了预定义的日期和时间格式名称。 可以通过这些名称用作Format函数的样式参数:
格式 | 描述 |
---|---|
General Date, or G | Displays a date and/or time. For example, 1/12/2012 07:07:30 AM 显示日期和/或时间。 例如,1/12/2012 07:07:30 AM。. |
Long Date,Medium Date, or D | Displays a date according to your current culture's long date format. For example, Sunday, December 16,2012. 根据您当前区域的长日期格式显示日期。 例如,2012年12月16日星期日 |
Short Date, or d | Displays a date using your current culture's short date format. For example, 12/12/2012 使用当前区域短日期格式显示日期。 例如,12/12/2012。. |
Long Time,Medium Time, orT | Displays a time using your current culture's long time format; typically includes hours, minutes, seconds. For example, 01:07:30 AM 使用您当前区域的长时间格式显示时间; 通常包括小时,分钟,秒。 例如,01:07:30 AM。. |
Short Time or t | Displays a time using your current culture's short time format. For example, 11:07 AM 使用当前区域的短时格式显示时间。 例如,11:07 AM。. |
f | Displays the long date and short time according to your current culture's format. For example, Sunday, December 16, 2012 12:15 AM 根据您当前的区域格式显示长日期和短时间。 例如,2012年12月16日星期日上午12:15。. |
F | Displays the long date and long time according to your current culture's format. For example, Sunday, December 16, 2012 12:15:31 AM 根据您当前的区域格式显示长日期和长时间。 例如,2012年12月16日星期日12:15:31 AM。. |
g | Displays the short date and short time according to your current culture's format. For example, 12/16/2012 12:15 AM 根据您当前的区域格式显示短日期和短时间。 例如,12/16/2012 12:15 AM。. |
M, m | Displays the month and the day of a date. For example, December 16 显示日期的月份和日期。 例如,12月16日。. |
R, r | Formats the date according to the RFC1123Pattern property 根据RFC1123Pattern属性格式化日期。. |
s | Formats the date and time as a sortable index. For example, 2012-12-16T12:07:31 将日期和时间格式化为可排序索引。 例如,2012-12-16T12:07:31。. |
u | Formats the date and time as a GMT sortable index. For example, 2012-12-16 12:15:31Z 将日期和时间格式设置为GMT可排序索引。 例如,2012-12-16 12:15:31Z。. |
U | Formats the date and time with the long date and long time as GMT. For example, Sunday, December 16, 2012 6:07:31 PM 将日期和时间格式设置为长日期和长时间,格式为GMT。 例如,星期日,2012年12月16日下午6:07:31。. |
Y, y | Formats the date as the year and month. For example, December, 2012 将日期格式设置为年和月。 例如,2012年12月。. |
对于其他格式,如用户定义的格式,请参阅Microsoft文档 。
下表列出了一些DateAndTime类的常用属性 :
SN | 属性 | 描述 |
---|---|---|
1 | Date | Returns or sets a String value representing the current date according to your system. 返回或设置根据系统代表当前日期的字符串值。 |
2 | Now | Returns a Date value containing the current date and time according to your system. 返回一个包含根据系统的当前日期和时间的日期值。 |
3 | TimeOfDay | Returns or sets a Date value containing the current time of day according to your system. 返回或设置根据你的系统包含当天的当前时间的日期值。 |
4 | Timer | Returns a Double value representing the number of seconds elapsed since midnight. 返回表示自午夜起经过的秒数为Double值。 |
5 | TimeString | Returns or sets a String value representing the current time of day according to your system. 返回或设置根据你的系统代表一天的当前时间的字符串值。 |
6 | Today | Gets the current date. 获取当前日期。 |
下表列出了一些DateAndTime类的常用方法 :
SN | 方法名称和说明 |
---|---|
1 | Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime 返回包含已添加指定时间间隔的日期和时间值的Date值。 |
2 | Public Shared Function DateAdd (Interval As String,Number As Double,DateValue As Object ) As DateTime 返回包含已添加指定时间间隔的日期和时间值的Date值。 |
3 | Public Shared Function DateDiff (Interval As DateInterval, Date1 As DateTime, Date2 As DateTime, DayOfWeek As FirstDayOfWeek, WeekOfYear As FirstWeekOfYear ) As Long 返回指定两个日期值之间的时间间隔数的长整型值。 |
4 | Public Shared Function DatePart (Interval As DateInterval, DateValue As DateTime, FirstDayOfWeekValue As FirstDayOfWeek, FirstWeekOfYearValue As FirstWeekOfYear ) As Integer 返回包含给定Date值的指定组件的整数值。 |
5 | Public Shared Function Day (DateValue As DateTime) As Integer 返回从1到31的整数值,表示每月的某一天。 |
6 | Public Shared Function Hour (TimeValue As DateTime) As Integer 公共共享函数Hour (TIMEVALUE为DATETIME)作为整数 返回从0到23的整数值,表示一天中的小时。 |
7 | Public Shared Function Minute (TimeValue As DateTime) As Integer 返回一个从0到59的整数值,表示小时的分钟。 |
8 | Public Shared Function Month (DateValue As DateTime) As Integer 返回从1到12的整数值,表示一年中的月份。 |
9 | Public Shared Function MonthName (Month As Integer, Abbreviate As Boolean) As String 返回包含指定月份的名称的字符串值。 |
10 | Public Shared Function Second (TimeValue As DateTime) As Integer 返回从0到59,代表分钟的第二个整数值。 |
11 | Public Overridable Function ToString As String 返回表示当前对象的字符串。 |
12 | Public Shared Function Weekday (DateValue As DateTime, DayOfWeek As FirstDayOfWeek) As Integer 返回包含表示星期几的一个数的整数值。 |
13 | Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String 返回包含指定工作日名称的字符串值。 |
14 | Public Shared Function Year (DateValue As DateTime) As Integer 返回从1到9999表示年份的整数值。 |
上述名单并不详尽。有关属性和DateAndTime类的方法的完整列表,请参阅Microsoft文档 。
下面的程序演示其中的一些方法:
Module Module1 Sub Main() Dim birthday As Date Dim bday As Integer Dim month As Integer Dim monthname As String ' Assign a date using standard short format. birthday = #7/27/1998# bday = Microsoft.VisualBasic.DateAndTime.Day(birthday) month = Microsoft.VisualBasic.DateAndTime.Month(birthday) monthname = Microsoft.VisualBasic.DateAndTime.MonthName(month) Console.WriteLine(birthday) Console.WriteLine(bday) Console.WriteLine(month) Console.WriteLine(monthname) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
7/27/1998 12:00:00 AM277July
所有数组由连续的内存位置组成。 最低地址对应于第一个元素,最高地址对应于最后一个元素。
要在VB.Net中声明数组,可以使用Dim语句。 例如,
Dim intData(30) ' an array of 31 elementsDim strData(20) As String ' an array of 21 stringsDim twoDarray(10, 20) As Integer 'a two dimensional array of integersDim ranges(10, 100) 'a two dimensional array
您还可以在声明数组时初始化数组元素。 例如,
Dim intData() As Integer = {12, 16, 20, 24, 28, 32}Dim names() As String = {"Karthik", "Sandhya", _"Shivangi", "Ashwitha", "Somnath"}Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}
可以通过使用数组的索引来存储和访问数组中的元素。 以下程序演示了这一点:
Module arrayApl Sub Main() Dim n(10) As Integer ' n is an array of 11 integers ' Dim i, j As Integer ' initialize elements of array n ' For i = 0 To 10 n(i) = i + 100 ' set element at location i to i + 100 Next i ' output each array element's value ' For j = 0 To 10 Console.WriteLine("Element({0}) = {1}", j, n(j)) Next j Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Element(0) = 100Element(1) = 101Element(2) = 102Element(3) = 103Element(4) = 104Element(5) = 105Element(6) = 106Element(7) = 107Element(8) = 108Element(9) = 109Element(10) = 110
ReDim [Preserve] arrayname(subscripts)
Preserve关键字有助于在调整现有数组大小时保留现有数组中的数据。
arrayname是要重新维度的数组的名称。
subscripts指定新维度。
Module arrayApl Sub Main() Dim marks() As Integer ReDim marks(2) marks(0) = 85 marks(1) = 75 marks(2) = 90 ReDim Preserve marks(10) marks(3) = 80 marks(4) = 76 marks(5) = 92 marks(6) = 99 marks(7) = 79 marks(8) = 75 For i = 0 To 10 Console.WriteLine(i & vbTab & marks(i)) Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
0 851 752 903 804 765 926 997 798 759 010 0
VB.Net允许多维数组。多维数组也被称为矩形数组。
你可以声明一个二维的字符串数组:
Dim twoDStringArray(10, 20) As String
或者,整数变量的3维数组:
Dim threeDIntArray(10, 10, 10) As Integer
下面的程序演示创建和使用二维数组:
Module arrayApl Sub Main() ' an array with 5 rows and 2 columns Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}} Dim i, j As Integer ' output each array element's value ' For i = 0 To 4 For j = 0 To 1 Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j)) Next j Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a[0,0]: 0a[0,1]: 0a[1,0]: 1a[1,1]: 2a[2,0]: 2a[2,1]: 4a[3,0]: 3a[3,1]: 6a[4,0]: 4a[4,1]: 8
Jagged数组是一个数组的数组。 以下代码显示了声明一个名为score of Integers的不规则数组:
Dim scores As Integer()() = New Integer(5)(){}
下面的例子说明使用不规则数组:
Module arrayApl Sub Main() 'a jagged array of 5 array of integers Dim a As Integer()() = New Integer(4)() {} a(0) = New Integer() {0, 0} a(1) = New Integer() {1, 2} a(2) = New Integer() {2, 4} a(3) = New Integer() {3, 6} a(4) = New Integer() {4, 8} Dim i, j As Integer ' output each array element's value For i = 0 To 4 For j = 0 To 1 Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j)) Next j Next i Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
a[0][0]: 0a[0][1]: 0a[1][0]: 1a[1][1]: 2a[2][0]: 2a[2][1]: 4a[3][0]: 3a[3][1]: 6a[4][0]: 4a[4][1]: 8
Array类是VB.Net中所有数组的基类。 它在系统命名空间中定义。 Array类提供了处理数组的各种属性和方法。
下表提供了一些Array类中最常用的属性 :
SN | 属性名称和说明 |
---|---|
1 | IsFixedSize Gets a value indicating whether the Array has a fixed size. 获取一个值,指示数组是否具有固定大小。 |
2 | IsReadOnly Gets a value indicating whether the Array is read-only. 获取一个值,该值指示Array是否为只读。 |
3 | Length Gets a 32-bit integer that represents the total number of elements in all the dimensions of the Array. 获取一个32位整数,表示数组所有维度中元素的总数。 |
4 | LongLength Gets a 64-bit integer that represents the total number of elements in all the dimensions of the Array. 获取一个64位整数,表示数组所有维度中元素的总数。 |
5 | Rank Gets the rank (number of dimensions) of the Array. 获取数组的排名(维数)。 |
下表提供了一些最常用的Array类方法:
SN | 方法名称和说明 |
---|---|
1 | Public Shared Sub Clear (array As Array, index As Integer, length As Integer) 设置一个范围的数组元素的零,为false,或为空,这取决于元素类型。 |
2 | Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer) 复制一定范围内由数组以第一个元素的元素,并将它们粘贴到起始于第一个元素另一个数组。长度被指定为32位整数。 |
3 | Public Sub CopyTo (array As Array, index As Integer) 将当前的一维数组到指定的一维数组从指定的目标数组索引处的所有元素。索引被指定为32位整数。 |
4 | Public Function GetLength (dimension As Integer) As Integer 获取一个32位整数,它表示数组的指定维中的元素的数量。 |
5 | Public Function GetLongLength (dimension As Integer) As Long 获取一个64位整数,它代表了数组的指定维中的元素的数量。 |
6 | Public Function GetLowerBound (dimension As Integer) As Integer 获取下界在数组中指定的尺寸。 |
7 | Public Function GetType As Type 获取当前实例的类型(从Object继承)。 |
8 | Public Function GetUpperBound (dimension As Integer) As Integer 获取上限在数组中指定的尺寸。 |
9 | Public Function GetValue (index As Integer) As Object 获取在一维数组中指定位置的值。索引被指定为32位整数。 |
10 | Public Shared Function IndexOf (array As Array,value As Object) As Integer 搜索指定的对象,并返回第一次出现的整个一维数组中的索引。 |
11 | Public Shared Sub Reverse (array As Array) 反转在整个一维数组中的元素的顺序。 |
12 | Public Sub SetValue (value As Object, index As Integer) 在一维阵列中的指定位置设置一个值的元素。索引被指定为32位整数。 |
13 | Public Shared Sub Sort (array As Array) 使用排序了IComparable实现阵列中的每个元素在整个一维数组中的元素。 |
14 | Public Overridable Function ToString As String 返回表示当前对象(从Object继承)的字符串。 |
有关Array类属性和方法的完整列表,请参阅Microsoft文档。
下面的程序演示使用的一些Array类的方法:
Module arrayApl Sub Main() Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10} Dim temp As Integer() = list Dim i As Integer Console.Write("Original Array: ") For Each i In list Console.Write("{0} ", i) Next i Console.WriteLine() ' reverse the array Array.Reverse(temp) Console.Write("Reversed Array: ") For Each i In temp Console.Write("{0} ", i) Next i Console.WriteLine() 'sort the array Array.Sort(list) Console.Write("Sorted Array: ") For Each i In list Console.Write("{0} ", i) Next i Console.WriteLine() Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Original Array: 34 72 13 44 25 30 10Reversed Array: 10 30 25 44 13 72 34Sorted Array: 10 13 25 30 34 44 72
集合类是用于数据存储和检索的专用类。 这些类提供对堆栈,队列,列表和哈希表的支持。 大多数集合类实现相同的接口。
集合类用于各种目的,例如动态地为元素分配内存以及基于索引访问项目列表等。这些类创建Object类的对象集合,Object类是VB中所有数据类型的基类 。
以下是System.Collection命名空间的各种常用类。 单击以下链接以检查其详细信息。
Class | Description and Useage |
---|---|
It represents ordered collection of an object that can be indexedindividually. 它表示可以单独索引的对象的有序集合。 It is basically an alternative to an array. However, unlike array, you can add and remove items from a list at a specified position using anindex and the array resizes itself automatically. It also allows dynamic memory allocation, add, search and sort items in the list. 它基本上是一个数组的替代。 但是,与数组不同,您可以使用索引在指定位置从列表中添加和删除项目,并且数组会自动调整大小。 它还允许动态内存分配,添加,搜索和排序列表中的项目。 | |
It uses a key to access the elements in the collection. 它使用一个键来访问集合中的元素。 A hash table is used when you need to access elements by using key, and you can identify a useful key value. Each item in the hash table has a key/value pair. The key is used to access the items in the collection. 当您需要通过使用键访问元素时使用散列表,您可以标识有用的键值。 散列表中的每个项都有一个键/值对。 该键用于访问集合中的项目。 | |
It uses a key as well as an index to access the items in a list. 它使用一个密钥以及索引来访问列表中的项目。 A sorted list is a combination of an array and a hash table. It contains a list of items that can be accessed using a key or an index. If you access items using an index, it is an ArrayList, and if you access items using a key, it is a Hashtable. The collection of items is always sorted by the key value. 排序的列表是数组和哈希表的组合。它包含可以使用的键或索引访问的项的列表。如果您访问使用索引的项目,它是一个 ArrayList,和如果你访问项目使用一把钥匙,它是一个哈希表。项的集合总是按关键值排序的。 | |
It represents a last-in, first out collection of object. 它表示对象的后进先出的集合。 It is used when you need a last-in, first-out access of items. When you add an item in the list, it is called pushing the item, and when you remove it, it is calledpopping the item. 当您需要项目的最后进入,首先访问时使用。 当您在列表中添加项目时,称为推送项目,当您删除它时,它被称为弹出项目。 | |
It represents a first-in, first out collection of object. 它表示对象的先进先出集合。 It is used when you need a first-in, first-out access of items. When you add an item in the list, it is called enqueue, and when you remove an item, it is called deque. 当您需要项目的先进先出访问时使用。 当您在列表中添加项目时,它被称为enqueue,当您删除项目时,称为deque。 | |
It represents an array of the binary representation using the values 1 and 0. 它表示使用值1和0的二进制表示的数组。 It is used when you need to store the bits but do not know the number of bits in advance. You can access items from the BitArray collection by using an integer index, which starts from zero. 它用于需要存储位但不提前知道位数。 您可以通过使用从零开始的整数索引来访问BitArray集合中的项目。 |
过程是一组调用时一起执行任务的语句。执行该过程之后,控制返回到调用过程的语句。 VB.Net有两种类型的程序:
Functions
Sub procedures or Subs
函数返回一个值,而Subs不返回值。
函数语句用于声明函数的名称,参数和主体。 函数语句的语法是:
[Modifiers] Function FunctionName [(ParameterList)] As ReturnType [Statements]End Function
Modifiers 修饰符 :指定函数的访问级别;可能的值有:公共,私有,保护,朋友,关于保护超载,重载,共享和阴影朋友和信息。
FunctionName:表示该函数的名称
ParameterList 参数列表 :指定参数的列表
ReturnType 返回类型 :指定变量的函数返回的数据类型
以下代码片段显示了一个函数FindMax,它接受两个整数值,并返回两个较大者。
Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num1 > num2) Then result = num1 Else result = num2 End If FindMax = resultEnd Function
在VB.Net中,函数可以通过两种方式向调用代码返回一个值:
通过使用return语句
通过将值分配给函数名
下面的例子演示了如何使用FindMax函数:
Module myfunctions Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num1 > num2) Then result = num1 Else result = num2 End If FindMax = result End Function Sub Main() Dim a As Integer = 100 Dim b As Integer = 200 Dim res As Integer res = FindMax(a, b) Console.WriteLine("Max value is : {0}", res) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Max value is : 200
一个函数可以调用自身。 这被称为递归。 以下是使用递归函数计算给定数字的阶乘的示例:
Module myfunctions Function factorial(ByVal num As Integer) As Integer ' local variable declaration */ Dim result As Integer If (num = 1) Then Return 1 Else result = factorial(num - 1) * num Return result End If End Function Sub Main() 'calling the factorial method Console.WriteLine("Factorial of 6 is : {0}", factorial(6)) Console.WriteLine("Factorial of 7 is : {0}", factorial(7)) Console.WriteLine("Factorial of 8 is : {0}", factorial(8)) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Factorial of 6 is: 720Factorial of 7 is: 5040Factorial of 8 is: 40320
Module myparamfunc Function AddElements(ParamArray arr As Integer()) As Integer Dim sum As Integer = 0 Dim i As Integer = 0 For Each i In arr sum += i Next i Return sum End Function Sub Main() Dim sum As Integer sum = AddElements(512, 720, 250, 567, 889) Console.WriteLine("The sum is: {0}", sum) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
The sum is: 2938
您可以在VB.Net中将数组作为函数参数传递。 以下示例演示了这一点:
Module arrayParameter Function getAverage(ByVal arr As Integer(), ByVal size As Integer) As Double 'local variables Dim i As Integer Dim avg As Double Dim sum As Integer = 0 For i = 0 To size - 1 sum += arr(i) Next i avg = sum / size Return avg End Function Sub Main() ' an int array with 5 elements ' Dim balance As Integer() = {1000, 2, 3, 17, 50} Dim avg As Double 'pass pointer to the array as an argument avg = getAverage(balance, 5) ' output the returned value ' Console.WriteLine("Average value is: {0} ", avg) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Average value is: 214.4
正如我们在上一章中提到的,Sub过程是不返回任何值的过程。 我们在所有的例子中一直使用Sub过程Main。 到目前为止,我们已经在这些教程中编写控制台应用程序。 当这些应用程序开始时,控制转到主子程序,它反过来运行构成程序主体的任何其他语句。
Sub语句用于声明子过程的名称,参数和主体。 Sub语句的语法是:
[Modifiers] Sub SubName [(ParameterList)] [Statements]End Sub
Modifiers 修饰符 :指定过程的访问级别;可能的值有:Public, Private, Protected, Friend, Protected Friend and information regarding overloading, overriding, sharing, and shadowing.
SubName 子名 :表示该子的名字
ParameterList 参数列表 :指定参数的列表
Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal) 'local variable declaration Dim pay As Double pay = hours * wage Console.WriteLine("Total Pay: {0:C}", pay) End Sub Sub Main() 'calling the CalculatePay Sub Procedure CalculatePay(25, 10) CalculatePay(40, 20) CalculatePay(30, 27.5) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Total Pay: $250.00Total Pay: $800.00Total Pay: $825.00
这是将参数传递给方法的默认机制。 在这种机制中,当调用方法时,为每个值参数创建一个新的存储位置。 实际参数的值被复制到它们中。 因此,对方法中的参数所做的更改对参数没有影响。
在VB.Net中,可以使用ByVal关键字声明引用参数。 下面的例子演示了这个概念:
Module paramByval Sub swap(ByVal x As Integer, ByVal y As Integer) Dim temp As Integer temp = x ' save the value of x x = y ' put y into x y = temp 'put temp into y End Sub Sub Main() ' local variable definition Dim a As Integer = 100 Dim b As Integer = 200 Console.WriteLine("Before swap, value of a : {0}", a) Console.WriteLine("Before swap, value of b : {0}", b) ' calling a function to swap the values ' swap(a, b) Console.WriteLine("After swap, value of a : {0}", a) Console.WriteLine("After swap, value of b : {0}", b) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Before swap, value of a :100Before swap, value of b :200After swap, value of a :100After swap, value of b :200
它表明,虽然它们在函数内部已更改,但值中没有变化。
引用参数是对变量的存储器位置的引用。 当您通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。 参考参数表示与提供给该方法的实际参数相同的存储器位置。
在VB.Net中,可以使用ByRef关键字声明引用参数。 以下示例演示了这一点:
Module paramByref Sub swap(ByRef x As Integer, ByRef y As Integer) Dim temp As Integer temp = x ' save the value of x x = y ' put y into x y = temp 'put temp into y End Sub Sub Main() ' local variable definition Dim a As Integer = 100 Dim b As Integer = 200 Console.WriteLine("Before swap, value of a : {0}", a) Console.WriteLine("Before swap, value of b : {0}", b) ' calling a function to swap the values ' swap(a, b) Console.WriteLine("After swap, value of a : {0}", a) Console.WriteLine("After swap, value of b : {0}", b) Console.ReadLine() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Before swap, value of a : 100Before swap, value of b : 200After swap, value of a : 200After swap, value of b : 100
类的定义以关键字Class开头,后跟类名称; 和类体,由End Class语句结束。 以下是类定义的一般形式:
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _Class name [ ( Of typelist ) ] [ Inherits classname ] [ Implements interfacenames ] [ statements ]End Class
attributelist 属性列表:is a list of attributes that apply to the class. Optional. attributelist是一个适用于类的属性列表。 可选的。
accessmodifier 访问修改器:defines the access levels of the class, it has values as - Public, Protected, Friend, Protected Friend and Private. Optional. accessmodifier定义类的访问级别,它的值为 - Public,Protected,Friend,Protected Friend和Private。 可选的。
Shadows 阴影:indicate that the variable re-declares and hides an identically named element, or set of overloaded elements, in a base class. Optional. 阴影表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。 可选的。
MustInherit:specifies that the class can be used only as a base class and that you cannot create an object directly from it, i.e., an abstract class. Optional. MustInherit指定该类只能用作基类,并且不能直接从它创建对象,即抽象类。 可选的。
NotInheritable 不可继承:specifies that the class cannot be used as a base class. NotInheritable指定该类不能用作基类。
Partial 部分:indicates a partial definition of the class. Partial表示类的部分定义。
Inherits 继承:specifies the base class it is inheriting from. Inherits指定它继承的基类。
Implements 实现:specifies the interfaces the class is inheriting from. Implements指定类继承的接口。
下面的示例演示了一个Box类,它有三个数据成员,长度,宽度和高度:
Module mybox Class Box Public length As Double ' Length of a box Public breadth As Double ' Breadth of a box Public height As Double ' Height of a box End Class Sub Main() Dim Box1 As Box = New Box() ' Declare Box1 of type Box Dim Box2 As Box = New Box() ' Declare Box2 of type Box Dim volume As Double = 0.0 ' Store the volume of a box here ' box 1 specification Box1.height = 5.0 Box1.length = 6.0 Box1.breadth = 7.0 ' box 2 specification Box2.height = 10.0 Box2.length = 12.0 Box2.breadth = 13.0 'volume of box 1 volume = Box1.height * Box1.length * Box1.breadth Console.WriteLine("Volume of Box1 : {0}", volume) 'volume of box 2 volume = Box2.height * Box2.length * Box2.breadth Console.WriteLine("Volume of Box2 : {0}", volume) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Volume of Box1 : 210Volume of Box2 : 1560
Module mybox Class Box Public length As Double ' Length of a box Public breadth As Double ' Breadth of a box Public height As Double ' Height of a box Public Sub setLength(ByVal len As Double) length = len End Sub Public Sub setBreadth(ByVal bre As Double) breadth = bre End Sub Public Sub setHeight(ByVal hei As Double) height = hei End Sub Public Function getVolume() As Double Return length * breadth * height End Function End Class Sub Main() Dim Box1 As Box = New Box() ' Declare Box1 of type Box Dim Box2 As Box = New Box() ' Declare Box2 of type Box Dim volume As Double = 0.0 ' Store the volume of a box here ' box 1 specification Box1.setLength(6.0) Box1.setBreadth(7.0) Box1.setHeight(5.0) 'box 2 specification Box2.setLength(12.0) Box2.setBreadth(13.0) Box2.setHeight(10.0) ' volume of box 1 volume = Box1.getVolume() Console.WriteLine("Volume of Box1 : {0}", volume) 'volume of box 2 volume = Box2.getVolume() Console.WriteLine("Volume of Box2 : {0}", volume) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Volume of Box1 : 210Volume of Box2 : 1560
Class Line Private length As Double ' Length of a line Public Sub New() 'constructor Console.WriteLine("Object is being created") End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line() 'set line length line.setLength(6.0) Console.WriteLine("Length of line : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being createdLength of line : 6
默认构造函数没有任何参数,但如果需要,构造函数可以有参数。 这样的构造函数称为参数化构造函数。 此技术可帮助您在创建对象时为其分配初始值,如以下示例所示:
Class Line Private length As Double ' Length of a line Public Sub New(ByVal len As Double) 'parameterised constructor Console.WriteLine("Object is being created, length = {0}", len) length = len End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line(10.0) Console.WriteLine("Length of line set by constructor : {0}", line.getLength()) 'set line length line.setLength(6.0) Console.WriteLine("Length of line set by setLength : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being created, length = 10Length of line set by constructor : 10Length of line set by setLength : 6
析构函数是一个类的特殊成员Sub,只要它的类的对象超出范围,它就被执行。
Class Line Private length As Double ' Length of a line Public Sub New() 'parameterised constructor Console.WriteLine("Object is being created") End Sub Protected Overrides Sub Finalize() ' destructor Console.WriteLine("Object is being deleted") End Sub Public Sub setLength(ByVal len As Double) length = len End Sub Public Function getLength() As Double Return length End Function Shared Sub Main() Dim line As Line = New Line() 'set line length line.setLength(6.0) Console.WriteLine("Length of line : {0}", line.getLength()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Object is being createdLength of line : 6Object is being deleted
Class StaticVar Public Shared num As Integer Public Sub count() num = num + 1 End Sub Public Shared Function getNum() As Integer Return num End Function Shared Sub Main() Dim s As StaticVar = New StaticVar() s.count() s.count() s.count() Console.WriteLine("Value of variable num: {0}", StaticVar.getNum()) Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Value of variable num: 3
<access-specifier> Class <base_class>...End ClassClass <derived_class>: Inherits <base_class>...End Class
考虑一个基类Shape和它的派生类Rectangle:
' Base classClass Shape Protected width As Integer Protected height As Integer Public Sub setWidth(ByVal w As Integer) width = w End Sub Public Sub setHeight(ByVal h As Integer) height = h End SubEnd Class' Derived classClass Rectangle : Inherits Shape Public Function getArea() As Integer Return (width * height) End FunctionEnd ClassClass RectangleTester Shared Sub Main() Dim rect As Rectangle = New Rectangle() rect.setWidth(5) rect.setHeight(7) ' Print the area of the object. Console.WriteLine("Total area: {0}", rect.getArea()) Console.ReadKey() End Sub End Class
当上述代码被编译和执行时,它产生了以下结果:
Total area: 35
' Base classClass Rectangle Protected width As Double Protected length As Double Public Sub New(ByVal l As Double, ByVal w As Double) length = l width = w End Sub Public Function GetArea() As Double Return (width * length) End Function Public Overridable Sub Display() Console.WriteLine("Length: {0}", length) Console.WriteLine("Width: {0}", width) Console.WriteLine("Area: {0}", GetArea()) End Sub 'end class Rectangle End Class'Derived classClass Tabletop : Inherits Rectangle Private cost As Double Public Sub New(ByVal l As Double, ByVal w As Double) MyBase.New(l, w) End Sub Public Function GetCost() As Double Dim cost As Double cost = GetArea() * 70 Return cost End Function Public Overrides Sub Display() MyBase.Display() Console.WriteLine("Cost: {0}", GetCost()) End Sub 'end class TabletopEnd ClassClass RectangleTester Shared Sub Main() Dim t As Tabletop = New Tabletop(4.5, 7.5) t.Display() Console.ReadKey() End SubEnd Class
当上述代码被编译和执行时,它产生了以下结果:
Length: 4.5Width: 7.5Area: 33.75Cost: 2362.5
VB.Net支持多重继承。
异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。 VB.Net异常处理建立在四个关键字:Try,Catch,Finally和Throw。
Try: A Try block identifies a block of code for which particular exceptions will be activated. It's followed by one or more Catch blocks. Try块标识将激活特定异常的代码块。 它后面是一个或多个Catch块。
Catch: A program catches an exception with an exception handler at the place in a program where you want to handle the problem. The Catch keyword indicates the catching of an exception. 程序捕获异常,并在程序中要处理问题的位置使用异常处理程序。 Catch关键字表示捕获异常。
Finally: The Finally block is used to execute a given set of statements, whether an exception is thrown or not thrown. For example, if you open a file, it must be closed whether an exception is raised or not. 最后:Finally块用于执行给定的一组语句,无论是抛出还是不抛出异常。 例如,如果打开一个文件,那么无论是否引发异常,都必须关闭该文件。
Throw: A program throws an exception when a problem shows up. This is done using a Throw keyword. 当出现问题时,程序抛出异常。 这是使用Throw关键字完成的。
假设块将引发异常,则方法使用Try和Catch关键字的组合捕获异常。 Try / Catch块放置在可能生成异常的代码周围。 Try / Catch块中的代码称为受保护代码,使用Try / Catch的语法如下所示:
Try [ tryStatements ] [ Exit Try ][ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ][ Catch ... ][ Finally [ finallyStatements ] ]End Try
您可以列出多个catch语句以捕获不同类型的异常,以防您的try块在不同情况下引发多个异常。
在.Net框架中,异常由类表示。 .Net Framework中的异常类主要直接或间接从System.Exception类派生。 从System.Exception类派生的一些异常类是System.ApplicationException和System.SystemException类。
System.ApplicationException类支持由应用程序生成的异常。 所以程序员定义的异常应该从这个类派生。
System.SystemException类是所有预定义系统异常的基类。
下表提供了从Sytem.SystemException类派生的一些预定义异常类:
异常类 | 描述 |
---|---|
System.IO.IOException | Handles I/O errors. 处理I / O错误。 |
System.IndexOutOfRangeException | Handles errors generated when a method refers to an array index out of range. 当处理的方法是指一个数组索引超出范围产生的错误。 |
System.ArrayTypeMismatchException | Handles errors generated when type is mismatched with the array type 处理类型与数组类型不匹配时生成的错误。. |
System.NullReferenceException | Handles errors generated from deferencing a null object. 处理从取消引用空对象生成的错误。 |
System.DivideByZeroException | Handles errors generated from dividing a dividend with zero. 处理将股利除以零所产生的错误。 |
System.InvalidCastException | Handles errors generated during typecasting. 处理类型转换期间生成的错误。 |
为System.OutOfMemoryException | Handles errors generated from insufficient free memory. 处理来自可用内存不足产生的错误。 |
System.StackOverflowException | Handles errors generated from stack overflow. 处理来自堆栈溢出产生的错误。 |
VB.Net提供了一个结构化的解决方案,以try和catch块的形式处理异常处理问题。 使用这些块,核心程序语句与错误处理语句分离。
Module exceptionProg Sub division(ByVal num1 As Integer, ByVal num2 As Integer) Dim result As Integer Try result = num1 num2 Catch e As DivideByZeroException Console.WriteLine("Exception caught: {0}", e) Finally Console.WriteLine("Result: {0}", result) End Try End Sub Sub Main() division(25, 0) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ...Result: 0
您还可以定义自己的异常。 用户定义的异常类派生自ApplicationException类。 以下示例演示了这一点:
Module exceptionProg Public Class TempIsZeroException : Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Public Class Temperature Dim temperature As Integer = 0 Sub showTemp() If (temperature = 0) Then Throw (New TempIsZeroException("Zero Temperature found")) Else Console.WriteLine("Temperature: {0}", temperature) End If End Sub End Class Sub Main() Dim temp As Temperature = New Temperature() Try temp.showTemp() Catch e As TempIsZeroException Console.WriteLine("TempIsZeroException: {0}", e.Message) End Try Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
TempIsZeroException: Zero Temperature found
Throw [ expression ]
下面的程序说明了这一点:
Module exceptionProg Sub Main() Try Throw New ApplicationException("A custom exception _ is being thrown here...") Catch e As Exception Console.WriteLine(e.Message) Finally Console.WriteLine("Now inside the Finally Block") End Try Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
A custom exception is being thrown here...Now inside the Finally Block
Afileis是存储在具有特定名称和目录路径的磁盘中的数据的集合。 当打开文件进行读取或写入时,它变为astream。
System.IO命名空间具有用于对文件执行各种操作的各种类,例如创建和删除文件,读取或写入文件,关闭文件等。
I / O类 | 描述 |
---|---|
BinaryReader | 读取二进制流的基本数据。 |
BinaryWriter | 以二进制格式写入原始数据。 |
BufferedStream | 对于字节流的临时存储。 |
Directory | 有助于操纵的目录结构。 |
DirectoryInfo | 用于对目录进行操作。 |
DriveInfo | 提供了驱动器的信息。 |
File | 有助于处理文件。 |
FileInfo | 用于对文件执行操作。 |
FileStream | 用于读,写在文件中的任何位置。 |
MemoryStream | 用于存储在存储器流传输数据的随机访问。 |
Path | 在执行路径信息的操作。 |
StreamReader | 用于从字节流读取字符。 |
StreamWriter | 用于写入字符流。 |
StringReader | 用于从字符串缓冲区中读取。 |
StringWriter | 用于写入字符串缓冲区。 |
Dim <object_name> As FileStream = New FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>)
例如,为创建FileStream对象读取文件namedsample.txt:
Dim f1 As FileStream = New FileStream("sample.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
参数 | 描述 |
---|---|
FileMode | FileModeenumerator定义了打开文件的各种方法。 FileMode枚举器的成员是:
|
FileAccess | FileAccessenumerators有成员:Read,ReadWriteandWrite。 |
FileShare | FileShareenumerators有以下成员:
|
下面的程序演示使用FileStream类:
Imports System.IOModule fileProg Sub Main() Dim f1 As FileStream = New FileStream("sample.txt", _ FileMode.OpenOrCreate, FileAccess.ReadWrite) Dim i As Integer For i = 0 To 20 f1.WriteByte(CByte(i)) Next i f1.Position = 0 For i = 0 To 20 Console.Write("{0} ", f1.ReadByte()) Next i f1.Close() Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1
我们将讨论这些类以及它们在以下部分中执行的操作。 请点击提供的链接以获取各个部分:
主题和说明 |
---|
Reading from and Writing into Text files It involves reading from and writing into text files. TheStreamReaderandStreamWriterclasses help to accomplish it. 它涉及从文本文件读取和写入。 TheStreamReaderandStreamWriterclasses有助于完成它。 |
Reading from and Writing into Binary files It involves reading from and writing into binary files. TheBinaryReaderandBinaryWriterclasses help to accomplish this. 它涉及从二进制文件读取和写入。 二进制Reader和BinaryWriterclasses有助于完成这一任务。 |
Manipulating the Windows file system It gives a VB.Net programmer the ability to browse and locate Windows files and directories. 它给了VB.Net程序员浏览和定位Windows文件和目录的能力。 |
对象是通过使用工具箱控件在Visual Basic窗体上创建的一种用户界面元素。 事实上,在Visual Basic中,表单本身是一个对象。 每个Visual Basic控件由三个重要元素组成:
Properties:描述对象的属性,
Methods:方法导致对象做某事,
Events:事件是当对象做某事时发生的事情。
Object. Property = Value
Object is the name of the object you're customizing. Object是您要定制的对象的名称。
Property is the characteristic you want to change. 属性是您要更改的特性。
Value is the new property setting. Value是新的属性设置。
例如,
Form1.Caption = "Hello"
您可以使用属性窗口设置任何窗体属性。 大多数属性可以在应用程序执行期间设置或读取。 您可以参考Microsoft文档中与应用于它们的不同控件和限制相关的属性的完整列表。
方法是作为类的成员创建的过程,它们使对象做某事。 方法用于访问或操纵对象或变量的特性。 您将在类中使用的主要有两类方法:
1、如果您使用的工具箱提供的控件之一,您可以调用其任何公共方法。 这种方法的要求取决于所使用的类。
2、如果没有现有方法可以执行所需的任务,则可以向类添加一个方法。
例如,MessageBox控件有一个名为Show的方法,它在下面的代码片段中调用:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("Hello, World") End SubEnd Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'event handler code goes hereEnd Sub
这里,Handles MyBase.Load表示Form1_Load()子例程处理Load事件。 类似的方式,你可以检查存根代码点击,双击。 如果你想初始化一些变量,如属性等,那么你将这样的代码保存在Form1_Load()子程序中。 这里,重要的一点是事件处理程序的名称,默认情况下是Form1_Load,但您可以根据您在应用程序编程中使用的命名约定更改此名称。
VB.Net提供了各种各样的控件,帮助您创建丰富的用户界面。 所有这些控制的功能在相应的控制类中定义。 控制类在System.Windows.Forms命名空间中定义。
S.N. | 小部件和说明 |
---|---|
1 | Forms 形式 The container for all the controls that make up the user interface. 用于构成用户界面的所有控件的容器。 |
2 | TextBox 文本框 It represents a Windows text box control. 它代表一个Windows文本框控件。 |
3 | Label 标签 It represents a standard Windows label. 它代表一个标准的Windows标签。 |
4 | Button 按钮 It represents a Windows button control. 它代表一个Windows按钮控件。 |
5 | ListBox 列表框 It represents a Windows control to display a list of items. 它代表一个显示项目列表的Windows控件。 |
6 | ComboBox 组合框 It represents a Windows combo box control. 它代表一个Windows组合框控件。 |
7 | RadioButton 单选按钮 It enables the user to select a single option from a group of choices when paired with other RadioButton controls. 它使用户能够在与其他RadioButton控件配对时从一组选项中选择一个选项。 |
8 | CheckBox 复选框 It represents a Windows CheckBox. 它代表一个Windows复选框。 |
9 | PictureBox 图片框 It represents a Windows picture box control for displaying an image. 它表示用于显示图像的Windows画面框控件。 |
10 | ProgressBar 进度条 It represents a Windows progress bar control. 它代表一个Windows进度条控件。 |
11 | ScrollBar 滚动条 It Implements the basic functionality of a scroll bar control. 它实现滚动条控件的基本功能。 |
12 | DateTimePicker 日期输入框 It represents a Windows control that allows the user to select a date and a time and to display the date and time with a specified format. 它代表一个Windows控件,允许用户选择日期和时间,并以指定的格式显示日期和时间。 |
13 | TreeView 树状图 It displays a hierarchical collection of labeled items, each represented by a TreeNode. 它显示标签项的分层集合,每个由树节点表示。 |
14 | ListView 列表显示 It represents a Windows list view control, which displays a collection of items that can be displayed using one of four different views. 它代表一个Windows列表视图控件,它显示可以使用四个不同视图之一显示的项目集合。 |
Abort 中止 - returns DialogResult.Abort value, when user clicks an Abort button. 当用户单击“中止”按钮时,返回DialogResult.Abort值。
Cancel 取消 -returns DialogResult.Cancel, when user clicks a Cancel button. 当用户单击Ignore按钮时,返回DialogResult.Ignore。
Ignore 忽略 -returns DialogResult.Ignore, when user clicks an Ignore button. 返回DialogResult.No,当用户单击否按钮。
No -returns DialogResult.No, when user clicks a No button. 不返回任何内容,对话框继续运行。
None 无 -returns nothing and the dialog box continues running. 返回DialogResult.OK,当用户单击确定按钮
OK -returns DialogResult.OK, when user clicks an OK button. 返回DialogResult. OK,当用户点击OK键
Retry 重试 -returns DialogResult.Retry , when user clicks an Retry button. 当用户单击重试按钮时,返回DialogResult.Retry
Yes -returns DialogResult.Yes, when user clicks an Yes button. 返回DialogResult.Yes,当用户单击是按钮
下图显示了通用对话框类继承:
S.N. | 控制& 说明 |
---|---|
1 | It represents a common dialog box that displays available colors along with controls that enable the user to define custom colors. 它表示一个公共对话框,显示可用颜色以及允许用户定义自定义颜色的控件。 |
2 | It prompts the user to choose a font from among those installed on the local computer and lets the user select the font, font size, and color. 它提示用户从安装在本地计算机上的字体中选择字体,并让用户选择字体,字体大小和颜色。 |
3 | It prompts the user to open a file and allows the user to select a file to open. 它提示用户打开文件,并允许用户选择要打开的文件。 |
4 | It prompts the user to select a location for saving a file and allows the user to specify the name of the file to save data. 它提示用户选择保存文件的位置,并允许用户指定保存数据的文件的名称。 |
5 | It lets the user to print documents by selecting a printer and choosing which sections of the document to print from a Windows Forms application. 它允许用户通过选择打印机并从Windows窗体应用程序中选择要打印的文档的哪些部分来打印文档。 |
|
在本章中,我们将研究以下概念:
在应用程序中添加菜单和子菜单
在表单中添加剪切,复制和粘贴功能
锚定和对接控制在一种形式
模态形式
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'defining the main menu bar Dim mnuBar As New MainMenu() 'defining the menu items for the main menu bar Dim myMenuItemFile As New MenuItem("&File") Dim myMenuItemEdit As New MenuItem("&Edit") Dim myMenuItemView As New MenuItem("&View") Dim myMenuItemProject As New MenuItem("&Project") 'adding the menu items to the main menu bar mnuBar.MenuItems.Add(myMenuItemFile) mnuBar.MenuItems.Add(myMenuItemEdit) mnuBar.MenuItems.Add(myMenuItemView) mnuBar.MenuItems.Add(myMenuItemProject) ' defining some sub menus Dim myMenuItemNew As New MenuItem("&New") Dim myMenuItemOpen As New MenuItem("&Open") Dim myMenuItemSave As New MenuItem("&Save") 'add sub menus to the File menu myMenuItemFile.MenuItems.Add(myMenuItemNew) myMenuItemFile.MenuItems.Add(myMenuItemOpen) myMenuItemFile.MenuItems.Add(myMenuItemSave) 'add the main menu to the form Me.Menu = mnuBar ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
Windows窗体包含一组丰富的类,用于创建您自己的具有现代外观,外观和感觉的自定义菜单。 MenuStrip,ToolStripMenuItem,ContextMenuStrip控件用于有效地创建菜单栏和上下文菜单。
点击以下链接查看他们的详细信息:
S.N. | Control & Description |
---|---|
1 | It provides a menu system for a form. 它为表单提供了一个菜单系统。 |
2 | It represents a selectable option displayed on a MenuStrip orContextMenuStrip. The ToolStripMenuItem control replaces and adds functionality to the MenuItem control of previous versions. 它表示在MenuStrip或ContextMenuStrip上显示的可选选项。 ToolStripMenuItem控件替换和添加以前版本的MenuItem控件的功能。 |
2 | It represents a shortcut menu. 它代表一个快捷菜单。 |
SN | 方法名称和说明 |
---|---|
1 | Clear Removes all data from the Clipboard. 删除从剪贴板中的所有数据。 |
2 | ContainsData Indicates whether there is data on the Clipboard that is in the specified format or can be converted to that format. 指示是否有上是在指定的格式或可转换成此格式的剪贴板中的数据。 |
3 | ContainsImage Indicates whether there is data on the Clipboard that is in the Bitmap format or can be converted to that format. 指示是否有关于那就是在Bitmap格式或可转换成该格式剪贴板数据。 |
4 | ContainsText Indicates whether there is data on the Clipboard in the Text or UnicodeText format, depending on the operating system. 指示是否在文本或UnicodeText格式剪贴板中的数据,根据不同的操作系统。 |
5 | GetData Retrieves data from the Clipboard in the specified format. 从指定格式的剪贴板中检索数据。 |
6 | GetDataObject Retrieves the data that is currently on the system Clipboard. 检索是目前系统剪贴板中的数据。 |
7 | getImage Retrieves an image from the Clipboard. 检索从剪贴板中的图像。 |
8 | getText Retrieves text data from the Clipboard in the Text or UnicodeText format, depending on the operating system. 从文本或UnicodeText格式剪贴板中检索文本数据,根据不同的操作系统。 |
9 | getText(TextDataFormat) Retrieves text data from the Clipboard in the format indicated by the specified TextDataFormat value. 从由指定TextDataFormat值指示的格式剪贴板中检索文本数据。 |
10 | SetData Clears the Clipboard and then adds data in the specified format. 清除剪贴板,然后以指定的格式将数据添加。 |
11 | setText(String) Clears the Clipboard and then adds text data in the Text or UnicodeText format, depending on the operating system. 清除剪贴板,然后添加在文本或UnicodeText格式的文本数据,根据不同的操作系统。 |
以下是一个示例,其中显示了如何使用Clipboard类的方法剪切,复制和粘贴数据。 执行以下步骤:
在表单上添加丰富的文本框控件和三个按钮控件。
将按钮的文本属性分别更改为“剪切”,“复制”和“粘贴”。
双击按钮,在代码编辑器中添加以下代码:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) RichTextBox1.SelectedText = "" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) _ Handles Button2.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) _ Handles Button3.Click Dim iData As IDataObject iData = Clipboard.GetDataObject() If (iData.GetDataPresent(DataFormats.Text)) Then RichTextBox1.SelectedText = iData.GetData(DataFormats.Text) Else RichTextBox1.SelectedText = " " End If End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
输入一些文本并检查按钮的工作方式。
输入一些文本并检查按钮的工作方式。
现在,当拉伸窗体时,Button和窗体右下角之间的距离保持不变。
例如,让我们在表单上添加一个Button控件,并将其Dock属性设置为Bottom。 运行此窗体以查看Button控件相对于窗体的原始位置。
现在,当你拉伸窗体时,Button会调整窗体的大小。
您可以通过两种方式调用模式窗体:
调用ShowDialog方法
调用Show方法
让我们举一个例子,我们将创建一个模态形式,一个对话框。 执行以下步骤:
将表单Form1添加到您的应用程序,并向Form1添加两个标签和一个按钮控件
将第一个标签和按钮的文本属性分别更改为“欢迎使用教程点”和“输入您的名称”。 将第二个标签的文本属性保留为空。
添加一个新的Windows窗体,Form2,并向Form2添加两个按钮,一个标签和一个文本框。
将按钮的文本属性分别更改为“确定”和“取消”。 将标签的文本属性更改为“输入您的姓名:”。
将Form2的FormBorderStyle属性设置为FixedDialog,为其提供对话框边框。
将Form2的ControlBox属性设置为False。
将Form2的ShowInTaskbar属性设置为False。
将OK按钮的DialogResult属性设置为OK,将Cancel按钮设置为Cancel。
在Form2的Form2_Load方法中添加以下代码片段:
Private Sub Form2_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load AcceptButton = Button1 CancelButton = Button2End Sub
在Form1的Button1_Click方法中添加以下代码片段:
Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Dim frmSecond As Form2 = New Form2() If frmSecond.ShowDialog() = DialogResult.OK Then Label2.Text = frmSecond.TextBox1.Text End IfEnd Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
点击“输入您的姓名”按钮显示第二个表单:
单击确定按钮将控制和信息从模态形式返回到先前的形式:
单击按钮,或在文本框中输入某些文本,或单击菜单项,都是事件的示例。 事件是调用函数或可能导致另一个事件的操作。
事件处理程序是指示如何响应事件的函数。
鼠标事件 Mouse events
键盘事件 Keyboard events
鼠标事件发生与鼠标移动形式和控件。以下是与Control类相关的各种鼠标事件:
MouseDown -当按下鼠标按钮时发生
MouseEnter -当鼠标指针进入控件时发生
MouseHover -当鼠标指针悬停在控件上时发生
MouseLeave -鼠标指针离开控件时发生
MouseMove -当鼠标指针移动到控件上时
MouseUp -当鼠标指针在控件上方并且鼠标按钮被释放时发生
MouseWheel -它发生在鼠标滚轮移动和控件有焦点时
鼠标事件的事件处理程序获得一个类型为MouseEventArgs的参数。 MouseEventArgs对象用于处理鼠标事件。它具有以下属性:
Buttons-表示按下鼠标按钮
Clicks-显示点击次数
Delta-表示鼠标轮旋转的定位槽的数量
X -指示鼠标点击的x坐标
Y -表示鼠标点击的y坐标
下面是一个例子,它展示了如何处理鼠标事件。执行以下步骤:
在表单中添加三个标签,三个文本框和一个按钮控件。
将标签的文本属性分别更改为 - 客户ID,名称和地址。
将文本框的名称属性分别更改为txtID,txtName和txtAddress。
将按钮的文本属性更改为“提交”。
在代码编辑器窗口中添加以下代码:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspont.com" End Sub Private Sub txtID_MouseEnter(sender As Object, e As EventArgs)_ Handles txtID.MouseEnter 'code for handling mouse enter on ID textbox txtID.BackColor = Color.CornflowerBlue txtID.ForeColor = Color.White End Sub Private Sub txtID_MouseLeave(sender As Object, e As EventArgs) _ Handles txtID.MouseLeave 'code for handling mouse leave on ID textbox txtID.BackColor = Color.White txtID.ForeColor = Color.Blue End Sub Private Sub txtName_MouseEnter(sender As Object, e As EventArgs) _ Handles txtName.MouseEnter 'code for handling mouse enter on Name textbox txtName.BackColor = Color.CornflowerBlue txtName.ForeColor = Color.White End Sub Private Sub txtName_MouseLeave(sender As Object, e As EventArgs) _ Handles txtName.MouseLeave 'code for handling mouse leave on Name textbox txtName.BackColor = Color.White txtName.ForeColor = Color.Blue End Sub Private Sub txtAddress_MouseEnter(sender As Object, e As EventArgs) _ Handles txtAddress.MouseEnter 'code for handling mouse enter on Address textbox txtAddress.BackColor = Color.CornflowerBlue txtAddress.ForeColor = Color.White End Sub Private Sub txtAddress_MouseLeave(sender As Object, e As EventArgs) _ Handles txtAddress.MouseLeave 'code for handling mouse leave on Address textbox txtAddress.BackColor = Color.White txtAddress.ForeColor = Color.Blue End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click MsgBox("Thank you " & txtName.Text & ", for your kind cooperation") End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
尝试在文本框中输入文字,并检查鼠标事件:
以下是与Control类相关的各种键盘事件:
KeyDown -当按下一个键并且控件具有焦点时发生
KeyPress -当按下一个键并且控件具有焦点时发生
KeyUp -当控件具有焦点时释放键时发生
KeyDown和KeyUp事件的事件处理程序获得一个类型为KeyEventArgs的参数。此对象具有以下属性:
Alt -它指示是否按下ALT键/ p>
Control-它指示是否按下CTRL键
Handled-它指示事件是否被处理
KeyCode- 存储事件的键盘代码
KeyData-存储事件的键盘数据
KeyValue -存储事件的键盘值
Modifiers-指示按下哪个修饰键(Ctrl,Shift和/或Alt)
Shift-表示是否按下Shift键
KeyDown和KeyUp事件的事件处理程序获得一个类型为KeyEventArgs的参数。此对象具有以下属性:
Handled-指示KeyPress事件处理
KeyChar -存储对应于按下的键的字符
让我们继续前面的例子来说明如何处理键盘事件。 代码将验证用户为其客户ID和年龄输入一些数字。
添加一个带有文本属性为“Age”的标签,并添加一个名为txtAge的相应文本框。
添加以下代码以处理文本框txtID的KeyUP事件。
Private Sub txtID_KeyUP(sender As Object, e As KeyEventArgs) _ Handles txtID.KeyUp If (Not Char.IsNumber(ChrW(e.KeyCode))) Then MessageBox.Show("Enter numbers for your Customer ID") txtID.Text = " " End IfEnd Sub
添加以下代码以处理文本框txtID的KeyUP事件。
Private Sub txtAge_KeyUP(sender As Object, e As KeyEventArgs) _ Handles txtAge.KeyUp If (Not Char.IsNumber(ChrW(e.keyCode))) Then MessageBox.Show("Enter numbers for age") txtAge.Text = " " End IfEnd Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
如果将age或ID的文本留空,或输入一些非数字数据,则会出现一个警告消息框,并清除相应的文本:
正则表达式是可以与输入文本匹配的模式。 .Net框架提供了允许这种匹配的正则表达式引擎。 模式由一个或多个字符文字,运算符或构造组成。
有各种类别的字符,运算符和构造,允许您定义正则表达式。 单击以下链接以查找这些结构。
正则表达式类用于表示一个正则表达式。
正则表达式类有以下常用方法:
SN | 方法和说明 |
---|---|
1 | Public Function IsMatch (input As String) As Boolean 表示在正则表达式构造函数中指定的正则表达式是否发现在指定的输入字符串匹配。 |
2 | Public Function IsMatch (input As String, startat As Integer ) As Boolean 公共函数IsMatch(输入作为字符串,startat作为整数)作为布尔 指示在Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的起始位置开始。 |
3 | Public Shared Function IsMatch (input As String, pattern As String ) As Boolean 公共共享函数IsMatch(输入作为字符串,图案作为字符串)作为布尔 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
4 | Public Function Matches (input As String) As MatchCollection 公共函数匹配(输入作为字符串)作为MatchCollection 搜索指定的输入字符串以查找正则表达式的所有出现。 |
5 | Public Function Replace (input As String, replacement As String) As String 公共函数替换(输入作为字符串,更换作为字符串)作为字符串 在指定的输入字符串中,使用指定的替换字符串替换与正则表达式模式匹配的所有字符串。 |
6 | Public Function Split (input As String) As String() 公共函数(输入作为字符串)作为字符串() 将输入字符串插入到由正则表达式构造函数中指定一个正则表达式模式定义的位置的子字符串数组。 |
有关方法和属性的完整列表,请参阅Microsoft文档。
以下示例匹配以“S”开头的单词:
Imports System.Text.RegularExpressionsModule regexProg Sub showMatch(ByVal text As String, ByVal expr As String) Console.WriteLine("The Expression: " + expr) Dim mc As MatchCollection = Regex.Matches(text, expr) Dim m As Match For Each m In mc Console.WriteLine(m) Next m End Sub Sub Main() Dim str As String = "A Thousand Splendid Suns" Console.WriteLine("Matching words that start with 'S': ") showMatch(str, "SS*") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Matching words that start with 'S':The Expression: SS*SplendidSuns
以下示例匹配以“m”开头并以“e”结尾的单词:
Imports System.Text.RegularExpressionsModule regexProg Sub showMatch(ByVal text As String, ByVal expr As String) Console.WriteLine("The Expression: " + expr) Dim mc As MatchCollection = Regex.Matches(text, expr) Dim m As Match For Each m In mc Console.WriteLine(m) Next m End Sub Sub Main() Dim str As String = "make a maze and manage to measure it" Console.WriteLine("Matching words that start with 'm' and ends with 'e': ") showMatch(str, "mS*e") Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Matching words start with 'm' and ends with 'e':The Expression: mS*emakemazemanagemeasure
此示例替换了额外的空白空间:
Imports System.Text.RegularExpressionsModule regexProg Sub Main() Dim input As String = "Hello World " Dim pattern As String = "s+" Dim replacement As String = " " Dim rgx As Regex = New Regex(pattern) Dim result As String = rgx.Replace(input, replacement) Console.WriteLine("Original String: {0}", input) Console.WriteLine("Replacement String: {0}", result) Console.ReadKey() End SubEnd Module
当上述代码被编译和执行时,它产生了以下结果:
Original String: Hello World Replacement String: Hello World
ADO.Net对象模型只不过是通过各种组件的结构化流程。 对象模型可以被图形描述为:
通过数据提供者检索驻留在数据存储或数据库中的数据。 数据提供者的各种组件检索应用程序的数据并更新数据。
应用程序通过数据集或数据读取器访问数据。
Datasets 数据集:数据集将数据存储在断开连接的缓存中,应用程序从中检索数据。
Data readers 数据读取:数据读取器以只读和仅转发模式向应用程序提供数据。
SN | 对象和说明 |
---|---|
1 | Connection This component is used to set up a connection with a data source. 该组件被用来建立与数据源的连接。 |
2 | Command A command is a SQL statement or a stored procedure used to retrieve, insert, delete or modify data in a data source. 命令是用于检索,插入,删除或修改数据源中的数据的SQL语句或存储过程。 |
3 | DataReader Data reader is used to retrieve data from a data source in a read-only and forward-only mode. 数据读取器用于以只读和仅转发模式从数据源检索数据。 |
4 | DataAdapter This is integral to the working of ADO.Net since data is transferred to and from a database through a data adapter. It retrieves data from a database into a dataset and updates the database. When changes are made to the dataset, the changes in the database are actually done by the data adapter. 这是ADO.Net的工作的组成部分,因为数据通过数据适配器传输到数据库和从数据库传输。 它将数据从数据库检索到数据集并更新数据库。 当对数据集进行更改时,数据库中的更改实际上由数据适配器完成。 |
ADO.Net中包含以下不同类型的数据提供程序
SQL Server的.Net Framework数据提供者 - 提供对Microsoft SQL Server的访问。
OLE DB的.Net Framework数据提供者 - 提供对使用OLE DB公开的数据源的访问。
ODBC的.Net Framework数据提供程序 - 提供对ODBC公开的数据源的访问。
Oracle的.Net Framework数据提供程序 - 提供对Oracle数据源的访问。
EntityClient提供程序 - 允许通过实体数据模型(EDM)应用程序访问数据。
DataSet是数据的内存表示。 它是从数据库检索的断开连接的高速缓存的记录集。 当与数据库建立连接时,数据适配器创建数据集并在其中存储数据。 在检索数据并将其存储在数据集中之后,将关闭与数据库的连接。 这被称为“断开连接的架构”。 数据集用作包含表,行和列的虚拟数据库。
下图显示了数据集对象模型:
DataSet类存在于System.Data命名空间中。 下表描述了DataSet的所有组件:
SN | 组件及说明 |
---|---|
1 | DataTableCollection It contains all the tables retrieved from the data source. 它包含了从数据源中检索的所有表。 |
2 | DataRelationCollection It contains relationships and the links between tables in a data set. 它包含数据集中的表之间的关系和链接。 |
3 | ExtendedProperties It contains additional information, like the SQL statement for retrieving data, time of retrieval, etc. 它包含的其他信息,例如用于检索数据的SQL语句,检索的时间等 |
4 | DataTable It represents a table in the DataTableCollection of a dataset. It consists of the DataRow and DataColumn objects. The DataTable objects are case-sensitive. 它表示数据集的DataTableCollection中的表。它由DataRow和DataColumn对象组成。 DataTable对象区分大小写。 |
5 | DataRelation It represents a relationship in the DataRelationshipCollection of the dataset. It is used to relate two DataTable objects to each other through the DataColumn objects. 它表示数据集的DataRelationshipCollection中的关系。它用于通过DataColumn对象将两个DataTable对象相互关联。 |
6 | DataRowCollection It contains all the rows in a DataTable. 它包含DataTable中的所有行。 |
7 | DataView It represents a fixed customized view of a DataTable for sorting, filtering, searching, editing and navigation. 它表示用于排序,过滤,搜索,编辑和导航的DataTable的固定自定义视图。 |
8 | PrimaryKey It represents the column that uniquely identifies a row in a DataTable. 它表示唯一标识DataTable中某一行的列。 |
9 | DataRow It represents a row in the DataTable. The DataRow object and its properties and methods are used to retrieve, evaluate, insert, delete, and update values in the DataTable. The NewRow method is used to create a new row and the Add method adds a row to the table. 它表示DataTable中的一行。 DataRow对象及其属性和方法用于检索,评估,插入,删除和更新DataTable中的值。 NewRow方法用于创建一个新行,Add方法向表中添加一行。 |
10 | DataColumnCollection It represents all the columns in a DataTable. 它表示DataTable中的所有列。 |
11 | DataColumn It consists of the number of columns that comprise a DataTable. 它由组成DataTable的列数组成。 |
.Net框架提供两种类型的Connection类:
SqlConnection -设计用于连接到Microsoft SQL Server。
OleDbConnection -设计用于连接到各种数据库,如Microsoft Access和Oracle。
让我们连接到此数据库。 执行以下步骤:
选择工具 - >连接到数据库
在“添加连接”对话框中选择服务器名称和数据库名称。
单击测试连接按钮以检查连接是否成功。
在表单上添加一个DataGridView。
单击选择数据源组合框。
单击添加项目数据源链接。
这将打开“数据源配置向导”。
选择“数据库”作为数据源类型
选择的DataSet作为数据库模型。
选择已设置的连接。
保存连接字符串。
在我们的示例中选择数据库对象Customers表,然后单击完成按钮。
选择“预览数据”链接以查看“结果”网格中的数据:
当使用Microsoft Visual Studio工具栏上的“开始”按钮运行应用程序时,将显示以下窗口:
在这个例子中,让我们使用代码访问DataGridView控件中的数据。 执行以下步骤:
在窗体中添加一个DataGridView控件和一个按钮。
将按钮控件的文本更改为“填充”。
双击按钮控件,为按钮的Click事件添加所需的代码,如下所示:
Imports System.Data.SqlClientPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) _ Handles MyBase.Load 'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table. You can move, or remove it, as needed. Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS) ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim connection As SqlConnection = New sqlconnection() connection.ConnectionString = "Data Source=KABIR-DESKTOP; _ Initial Catalog=testDB;Integrated Security=True" connection.Open() Dim adp As SqlDataAdapter = New SqlDataAdapter _ ("select * from Customers", connection) Dim ds As DataSet = New DataSet() adp.Fill(ds) DataGridView1.DataSource = ds.Tables(0) End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击“填充”按钮可显示数据网格视图控件上的表:
到目前为止,我们已经使用我们的计算机中已经存在的表和数据库。 在本示例中,我们将创建一个表,向其中添加列,行和数据,并使用DataGridView对象显示表。
执行以下步骤:
在窗体中添加一个DataGridView控件和一个按钮。
将按钮控件的文本更改为“填充”。
在代码编辑器中添加以下代码。
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspont.com" End Sub Private Function CreateDataSet() As DataSet 'creating a DataSet object for tables Dim dataset As DataSet = New DataSet() ' creating the student table Dim Students As DataTable = CreateStudentTable() dataset.Tables.Add(Students) Return dataset End Function Private Function CreateStudentTable() As DataTable Dim Students As DataTable Students = New DataTable("Student") ' adding columns AddNewColumn(Students, "System.Int32", "StudentID") AddNewColumn(Students, "System.String", "StudentName") AddNewColumn(Students, "System.String", "StudentCity") ' adding rows AddNewRow(Students, 1, "Zara Ali", "Kolkata") AddNewRow(Students, 2, "Shreya Sharma", "Delhi") AddNewRow(Students, 3, "Rini Mukherjee", "Hyderabad") AddNewRow(Students, 4, "Sunil Dubey", "Bikaner") AddNewRow(Students, 5, "Rajat Mishra", "Patna") Return Students End Function Private Sub AddNewColumn(ByRef table As DataTable, _ ByVal columnType As String, ByVal columnName As String) Dim column As DataColumn = _ table.Columns.Add(columnName, Type.GetType(columnType)) End Sub 'adding data into the table Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,_ ByRef name As String, ByRef city As String) Dim newrow As DataRow = table.NewRow() newrow("StudentID") = id newrow("StudentName") = name newrow("StudentCity") = city table.Rows.Add(newrow) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim ds As New DataSet ds = CreateDataSet() DataGridView1.DataSource = ds.Tables("Student") End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击“填充”按钮可显示数据网格视图控件上的表:
VB.Net提供对Microsoft Excel 2010的COM对象模型和应用程序之间的互操作性的支持。
要在应用程序中使用此互操作性,您需要在Windows窗体应用程序中导入命名空间Microsoft.Office.Interop.Excel。
让我们从Microsoft Visual Studio中的以下步骤开始创建窗体表单应用程序:文件 - >新建项目 - > Windows窗体应用程序
最后,选择确定,Microsoft Visual Studio创建您的项目并显示以下Form1。
在窗体中插入Button控件Button1。
向项目中添加对Microsoft Excel对象库的引用。 进行以下操作:
从项目菜单中选择添加引用。
在COM选项卡上,找到Microsoft Excel对象库,然后单击选择。
点击OK。
双击代码窗口并填充Button1的Click事件,如下所示。
' Add the following code snippet on top of Form1.vbImports Excel = Microsoft.Office.Interop.ExcelPublic Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim appXL As Excel.Application Dim wbXl As Excel.Workbook Dim shXL As Excel.Worksheet Dim raXL As Excel.Range ' Start Excel and get Application object. appXL = CreateObject("Excel.Application") appXL.Visible = True ' Add a new workbook. wbXl = appXL.Workbooks.Add shXL = wbXl.ActiveSheet ' Add table headers going cell by cell. shXL.Cells(1, 1).Value = "First Name" shXL.Cells(1, 2).Value = "Last Name" shXL.Cells(1, 3).Value = "Full Name" shXL.Cells(1, 4).Value = "Specialization" ' Format A1:D1 as bold, vertical alignment = center. With shXL.Range("A1", "D1") .Font.Bold = True .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter End With ' Create an array to set multiple values at once. Dim students(5, 2) As String students(0, 0) = "Zara" students(0, 1) = "Ali" students(1, 0) = "Nuha" students(1, 1) = "Ali" students(2, 0) = "Arilia" students(2, 1) = "RamKumar" students(3, 0) = "Rita" students(3, 1) = "Jones" students(4, 0) = "Umme" students(4, 1) = "Ayman" ' Fill A2:B6 with an array of values (First and Last Names). shXL.Range("A2", "B6").Value = students ' Fill C2:C6 with a relative formula (=A2 & " " & B2). raXL = shXL.Range("C2", "C6") raXL.Formula = "=A2 & "" "" & B2" ' Fill D2:D6 values. With shXL .Cells(2, 4).Value = "Biology" .Cells(3, 4).Value = "Mathmematics" .Cells(4, 4).Value = "Physics" .Cells(5, 4).Value = "Mathmematics" .Cells(6, 4).Value = "Arabic" End With ' AutoFit columns A:D. raXL = shXL.Range("A1", "D1") raXL.EntireColumn.AutoFit() ' Make sure Excel is visible and give the user control ' of Excel's lifetime. appXL.Visible = True appXL.UserControl = True ' Release object references. raXL = Nothing shXL = Nothing wbXl = Nothing appXL.Quit() appXL = Nothing Exit SubErr_Handler: MsgBox(Err.Description, vbCritical, "Error: " & Err.Number) End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口:
单击按钮将显示以下excel表。 将要求您保存工作簿。
VB.Net允许从您的应用程序发送电子邮件。 System.Net.Mail命名空间包含用于向简单邮件传输协议(SMTP)服务器发送电子邮件以进行传递的类。
下表列出了一些常用的类:
SN | 类 | 描述 |
---|---|---|
1 | Attachment | 表示对电子邮件的附件。 |
2 | AttachmentCollection | 存储要作为电子邮件的一部分发送的附件。 |
3 | MailAddress | 表示电子邮件发件人或收件人的地址。 |
4 | MailAddressCollection | 存储与电子邮件相关联的电子邮件地址。 |
5 | MailMessage | 表示可以使用SmtpClient类发送的电子邮件。 |
6 | SmtpClient | 允许应用程序使用简单邮件传输协议(SMTP)发送电子邮件。 |
7 | SmtpException | 表示当SmtpClient无法完成发送或SendAsync操作时抛出的异常。 |
以下是SmtpClient类的一些常用属性:
SN | 属性 | 描述 |
---|---|---|
1 | ClientCertificates | 指定应使用哪些证书建立安全套接字层(SSL)连接。 |
2 | Credentials | 获取或设置用于验证发件人的凭据。 |
3 | EnableSsl | 指定SmtpClient是否使用安全套接字层(SSL)加密连接。 |
4 | Host | 获取或设置用于SMTP事务的主机的名称或IP地址。 |
5 | Port | 获取或设置用于SMTP事务的端口。 |
6 | Timeout | 获取或设置一个值,该值指定同步发送调用超时的时间量。 |
7 | UseDefaultCredentials | 获取或设置一个布尔值,该值控制是否随请求一起发送DefaultCredentials。 |
以下是SmtpClient类的一些常用方法:
SN | 方法和说明 |
---|---|
1 | Dispose 向SMTP服务器发送QUIT消息,正常结束TCP连接,并释放SmtpClient类的当前实例使用的所有资源。 |
2 | Dispose(Boolean) 向SMTP服务器发送QUIT消息,正常结束TCP连接,释放由SmtpClient类的当前实例使用的所有资源,并且可选地处置托管资源。 |
3 | OnSendCompleted 引发SendCompleted事件。 |
4 | Send(MailMessage) 将指定的消息发送到SMTP服务器进行传递。 |
5 | Send(String,String,String,String) 将指定的电子邮件发送到SMTP服务器进行传送。消息发件人,收件人,主题和邮件正文使用String对象指定。 |
6 | SendAsync(MailMessage,Object) 将指定的电子邮件发送到SMTP服务器进行传送。此方法不会阻止调用线程,并允许调用者将一个对象传递给操作完成时调用的方法。 |
7 | SendAsync(String,String,String,String,Object) 将电子邮件发送到SMTP服务器进行传送。消息发件人,收件人,主题和邮件正文使用String对象指定。此方法不会阻止调用线程,并允许调用者将一个对象传递给操作完成时调用的方法。
|
8 | SendAsyncCancel 取消异步操作以发送电子邮件。 |
9 | SendMailAsync(MAILMESSAGE) 发送指定消息,以交付作为异步操作的SMTP服务器。 |
10 | SendMailAsync(MailMessage) 将指定的消息发送到SMTP服务器以作为异步操作进行传递。
|
11 | ToString 返回表示当前对象的字符串。
|
以下示例演示如何使用SmtpClient类发送邮件。 在这方面应注意以下几点:
您必须指定用于发送电子邮件的SMTP主机服务器。 不同主机服务器的主机和端口属性将不同。 我们将使用gmail服务器。
如果SMTP服务器需要,您需要授予认证凭据。
您还应该分别使用MailMessage.From和MailMessage.To属性提供发件人的电子邮件地址和收件人的电子邮件地址。
您还应该使用MailMessage.Body属性指定消息内容。
在这个例子中,让我们创建一个发送电子邮件的简单应用程序。 执行以下步骤:
在表单中添加三个标签,三个文本框和一个按钮控件。
将标签的文本属性分别更改为 - “From”,“To:”和“Message:”。
将文本的名称属性分别更改为txtFrom,txtTo和txtMessage。
将按钮控件的文本属性更改为“发送”
在代码编辑器中添加以下代码。
Imports System.Net.MailPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try Dim Smtp_Server As New SmtpClient Dim e_mail As New MailMessage() Smtp_Server.UseDefaultCredentials = False Smtp_Server.Credentials = New Net.NetworkCredential("username@gmail.com", "password") Smtp_Server.Port = 587 Smtp_Server.EnableSsl = True Smtp_Server.Host = "smtp.gmail.com" e_mail = New MailMessage() e_mail.From = New MailAddress(txtFrom.Text) e_mail.To.Add(txtTo.Text) e_mail.Subject = "Email Sending" e_mail.IsBodyHtml = False e_mail.Body = txtMessage.Text Smtp_Server.Send(e_mail) MsgBox("Mail Sent") Catch error_t As Exception MsgBox(error_t.ToString) End Try End Sub您必须提供您的gmail地址和真实密码以获取凭据。
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将显示以下窗口,您将使用该窗口发送电子邮件,自行尝试。
SN | 类 | 描述 |
---|---|---|
1 | XmlAttribute | 表示属性。属性的有效值和默认值在文档类型定义(DTD)或模式中定义。 |
2 | XmlCDataSection | 表示一个CDATA部分。 |
3 | XmlCharacterData | 提供由几个类使用的文本处理方法。 |
4 | XMLCOMMENT | 表示一个XML注释的内容。 |
5 | XmlConvert | 对XML名称进行编码和解码,并提供在公共语言运行时类型和XML模式定义语言(XSD)类型之间进行转换的方法。转换数据类型时,返回的值与语言环境无关。 |
6 | XmlDeclaration | 表示XML声明节点<?xml version ='1.0'...?>。 |
7 | XmlDictionary | 实现一本字典用来优化 Windows 通信基础(WCF) 的 XML 读取器/编写器实现。 |
8 | XmlDictionaryReader | Windows Communication Foundation(WCF)从XmlReader派生来进行序列化和反序列化的抽象类。 |
9 | XmlDictionaryWriter | 表示Windows Communication Foundation(WCF)从XmlWriter派生来进行序列化和反序列化的抽象类。 |
10 | XmlDocument | 表示XML文档。 |
11 | XmlDocumentFragment | 表示对树插入操作有用的轻量级对象。 |
12 | XmlDocumentType | 表示文档类型声明。 |
13 | XmlElement | 表示一个元素。 |
14 | XmlEntity | 表示一个实体声明,如<!ENTITY ...>。 |
15 | XmlEntityReference | 表示一个实体引用节点。 |
16 | XmlException | 返回有关最后一个异常的详细信息。 |
17 | XmlImplementation | 定义一组XmlDocument对象的上下文。 |
18 | XmlLinkedNode | 获取此节点之前或之后的节点。 |
19 | XmlNode | 表示XML文档中的单个节点。 |
20 | XmlNodeList | 表示节点的有序集合。 |
21 | XmlNodeReader | 表示提供对XmlNode中的XML数据的快速,非缓存转发访问的阅读器。 |
22 | XmlNotation | 表示一个注释声明,如<!NOTATION ...>。 |
23 | XmlParserContext | 提供XmlReader解析XML片段所需的所有上下文信息。 |
24 | XmlProcessingInstruction | 表示处理指令,XML定义为在文档的文本中保留处理器特定的信息。 |
25 | XmlQualifiedName | 表示一个XML限定名称。 |
26 | XmlReader | 表示一个阅读器,提供了快速,非缓存,只进到XML数据访问。 |
27 | XmlReaderSettings | 指定一组要在Create方法创建的XmlReader对象上支持的要素。 |
28 | XmlResolver | 解析由统一资源标识符(URI)命名的外部XML资源。 |
29 | XmlSecureResolver | 有助于通过封装XmlResolver对象并限制底层XmlResolver有权访问的资源来保护XmlResolver的另一个实现。 |
30 | XmlSignificantWhitespace | 表示混合内容节点中的标记之间或xml:space ='preserve'范围内的空白空间中的空格。这也称为有效的空白空间。 |
31 | XmlText | 表示元素或属性的文本内容。 |
32 | XmlTextReader | 表示提供对XML数据的快速,非缓存,仅转发访问的阅读器。 |
33 | XmlTextWriter | 代表作家提供了一个快速,非缓存,只进生成包含符合W3C可扩展标记语言(XML)1.0和XML中建议的命名空间XML数据流或文件的方式。 |
34 | XmlUrlResolver | 解析由统一资源标识符(URI)命名的外部XML资源。 |
35 | XmlWhitespace | 代表元素内容中的空白。 |
36 | XmlWriter | 表示提供快速,非缓存,仅转发方式生成包含XML数据的流或文件的写入程序。 |
37 | XmlWriterSettings | 指定一组要在XmlWriter.Create方法创建的XmlWriter对象上支持的要素。 |
<?xml version="1.0"?><collection shelf="New Arrivals"><movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description></movie><movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description></movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description></movie><movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description></movie></collection>
此示例演示从文件movies.xml中读取XML数据。
执行以下步骤:
将movies.xml文件添加到应用程序的bin Debug文件夹中。
在Form1.vb文件中导入System.Xml命名空间。
在表单中添加标签,并将其文字更改为“Movies Galore”。
添加三个列表框和三个按钮,以显示来自xml文件的电影的标题,类型和描述。
使用代码编辑器窗口添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ListBox1().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then ListBox1.Items.Add(xr.GetAttribute(0)) End If Loop End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ListBox2().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then ListBox2.Items.Add(xr.ReadElementString) Else xr.Read() End If Loop End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click ListBox3().Items.Clear() Dim xr As XmlReader = XmlReader.Create("movies.xml") Do While xr.Read() If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then ListBox3.Items.Add(xr.ReadElementString) Else xr.Read() End If Loop End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击按钮将显示文件中电影的标题,类型和描述。
XmlWriter类用于将XML数据写入流,文件或TextWriter对象。 它也以只向前,非缓存的方式工作。
让我们通过在运行时添加一些数据来创建一个XML文件。 执行以下步骤:
在窗体中添加WebBrowser控件和按钮控件。
将按钮的Text属性更改为显示作者文件。
在代码编辑器中添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim xws As XmlWriterSettings = New XmlWriterSettings() xws.Indent = True xws.NewLineOnAttributes = True Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws) xw.WriteStartDocument() xw.WriteStartElement("Authors") xw.WriteStartElement("author") xw.WriteAttributeString("code", "1") xw.WriteElementString("fname", "Zara") xw.WriteElementString("lname", "Ali") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "2") xw.WriteElementString("fname", "Priya") xw.WriteElementString("lname", "Sharma") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "3") xw.WriteElementString("fname", "Anshuman") xw.WriteElementString("lname", "Mohan") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "4") xw.WriteElementString("fname", "Bibhuti") xw.WriteElementString("lname", "Banerjee") xw.WriteEndElement() xw.WriteStartElement("author") xw.WriteAttributeString("code", "5") xw.WriteElementString("fname", "Riyan") xw.WriteElementString("lname", "Sengupta") xw.WriteEndElement() xw.WriteEndElement() xw.WriteEndDocument() xw.Flush() xw.Close() WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml") End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击显示作者文件将在Web浏览器上显示新创建的authors.xml文件。
根据文档对象模型(DOM),XML文档由节点和节点的属性组成。 XmlDocument类用于实现.Net框架的XML DOM解析器。 它还允许您通过插入,删除或更新文档中的数据来修改现有的XML文档。
以下是XmlDocument类的一些常用方法:
SN | 方法名称和说明 |
---|---|
1 | AppendChild 将指定的节点添加到此节点的子节点列表的末尾。 |
2 | CreateAttribute(String) 使用指定的名称创建XmlAttribute。 |
3 | CreateComment 创建包含指定数据的XmlComment。 |
4 | CreateDefaultAttribute 创建具有指定前缀,本地名称和命名空间URI的默认属性。 |
5 | CreateElement(String) 创建具有指定名称的元素。 |
6 | CreateNode(String, String, String) 创建具有指定节点类型,Name和NamespaceURI的XmlNode。 |
7 | CreateNode(XmlNodeType, String, String) 创建具有指定的XmlNodeType,Name和NamespaceURI的XmlNode。 |
8 | CreateNode(XmlNodeType, String, String, String) 创建具有指定的XmlNodeType,Prefix,Name和NamespaceURI的XmlNode。 |
9 | CreateProcessingInstruction 创建具有指定名称和数据的XmlProcessingInstruction。 |
10 | CreateSignificantWhitespace 创建一个XmlSignificantWhitespace节点。 |
11 | createTextNode 创建具有指定文本的XMLTEXT。 |
12 | CreateWhitespace 创建一个XmlWhitespace节点。 |
13 | CreateXmlDeclaration 创建一个具有指定值的XmlDeclaration节点。 |
14 | GetElementById 获取具有指定ID的XmlElement。 |
15 | GetElementsByTagName(String) 返回一个包含与指定名称匹配的所有后代元素的列表的XmlNodeList。 |
16 | GetElementsByTagName(String, String) 返回一个包含与指定名称匹配的所有后代元素的列表的XmlNodeList。 |
17 | InsertAfter 在指定的引用节点之后立即插入指定的节点。 |
18 | InsertBefore 在指定的引用节点之前插入指定的节点。 |
19 | Load(Stream) 从指定的流装载XML文档。 |
20 | Load(String) 从指定的TextReader加载XML文档。 |
21 | Load(TextReader) 从指定的TextReader加载XML文档。 |
22 | Load(XmlReader) 从指定的XmlReader加载XML文档。 |
23 | LoadXml 从指定的字符串加载XML文档。 |
24 | PrependChild 将指定的节点添加到此节点的子节点列表的开头。 |
25 | ReadNode 基于XmlReader中的信息创建XmlNode对象。读取器必须位于节点或属性上。 |
26 | RemoveAll 删除当前节点的所有子节点和/或属性。 |
27 | RemoveChild 删除指定的子节点。 |
28 | ReplaceChild 将子节点oldChild替换为newChild节点。 |
29 | Save(Stream) 保存XML文档到指定的流。 |
30 | Save(String) 将XML文档保存到指定的文件。 |
31 | Save(TextWriter) 将XML文档保存到指定的TextWriter。 |
32 | Save(XmlWriter) 将XML文档保存到指定的XmlWriter。 |
在本示例中,让我们在xml文档authors.xml中插入一些新节点,然后在列表框中显示所有作者的名字。
执行以下步骤:
将authors.xml文件添加到应用程序的bin / Debug文件夹中(如果您已经尝试了最后一个示例,应该在那里)
导入System.Xml命名空间
在表单中添加列表框和按钮控件,并将按钮控件的text属性设置为“显示作者”。
使用代码编辑器添加以下代码。
Imports System.XmlPublic Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Set the caption bar text of the form. Me.Text = "tutorialspoint.com" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ListBox1.Items.Clear() Dim xd As XmlDocument = New XmlDocument() xd.Load("authors.xml") Dim newAuthor As XmlElement = xd.CreateElement("author") newAuthor.SetAttribute("code", "6") Dim fn As XmlElement = xd.CreateElement("fname") fn.InnerText = "Bikram" newAuthor.AppendChild(fn) Dim ln As XmlElement = xd.CreateElement("lname") ln.InnerText = "Seth" newAuthor.AppendChild(ln) xd.DocumentElement.AppendChild(newAuthor) Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing) tr.Formatting = Formatting.Indented xd.WriteContentTo(tr) tr.Close() Dim nl As XmlNodeList = xd.GetElementsByTagName("fname") For Each node As XmlNode In nl ListBox1.Items.Add(node.InnerText) Next node End SubEnd Class
使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码。 单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的作者。
动态Web应用程序包括以下两种类型的程序之一或两者:
服务器端脚本 -这些是在Web服务器上执行的程序,使用服务器端脚本语言(如ASP(Active Server Pages)或JSP(Java Server Pages))编写。
客户端脚本 -这些是在浏览器上执行的程序,使用脚本语言(如JavaScript,VBScript等)编写。
ASP.Net是由Microsoft引入的ASP的.Net版本,用于通过使用服务器端脚本创建动态网页。 ASP.Net应用程序是使用.Net框架中存在的可扩展和可重用组件或对象编写的编译代码。这些代码可以使用.Net框架中的类的整个层次结构。
ASP.Net应用程序代码可以用以下任何一种语言编写:
Visual Basic .NET
C#
Jscript脚本
J#
在本章中,我们将简要介绍使用VB.Net编写ASP.Net应用程序。有关详细讨论,请参阅ASP.Net教程。
ASP.Net有一些在Web服务器上运行的内置对象。 这些对象具有在应用程序开发中使用的方法,属性和集合。
下表列出了具有简要说明的ASP.Net内置对象:
目的 | 描述 |
---|---|
Application 应用 | 描述存储与整个Web应用程序相关的信息的对象的方法,属性和集合,包括应用程序生命周期中存在的变量和对象。 您使用此对象来存储和检索要在应用程序的所有用户之间共享的信息。例如,您可以使用Application对象来创建电子商务页面。
|
Request 请求 | 描述存储与HTTP请求相关的信息的对象的方法,属性和集合。这包括表单,Cookie,服务器变量和证书数据。 您使用此对象来访问在从浏览器到服务器的请求中发送的信息。例如,您可以使用Request对象来访问用户在HTML表单中输入的信息。
|
Response 响应 | 描述存储与服务器响应相关的信息的对象的方法,属性和集合。这包括显示内容,操作标头,设置区域设置和重定向请求。 您使用此对象向浏览器发送信息。例如,您使用Response对象将输出从脚本发送到浏览器。
|
Server 服务器 | 描述提供各种服务器任务的方法的对象的方法和属性。使用这些方法,您可以执行代码,获取错误条件,编码文本字符串,创建对象供网页使用,并映射物理路径。 您使用此对象访问服务器上的各种实用程序功能。例如,您可以使用Server对象为脚本设置超时。
|
Session 会话 | 描述存储与用户会话相关的信息的对象的方法,属性和集合,包括会话生存期内存在的变量和对象。 您使用此对象来存储和检索有关特定用户会话的信息。例如,您可以使用Session对象来保存有关用户及其首选项的信息,并跟踪待处理操作。
|
ASP.Net提供两种类型的编程模型:
Web Forms-这使您能够创建将应用于用户界面的各种组件的用户界面和应用程序逻辑。
WCF Services-这使您可以远程访问一些服务器端功能。
对于本章,您需要使用免费的Visual Studio Web Developer。 IDE与您已经用于创建Windows应用程序的IDE几乎相同。
Web表单包括:
用户界面
应用程序逻辑
用户界面包括静态HTML或XML元素和ASP.Net服务器控件。 创建Web应用程序时,HTML或XML元素和服务器控件存储在具有.aspx扩展名的文件中。 此文件也称为页面文件。
应用程序逻辑包括应用于页面中用户界面元素的代码。 你可以用任何.Net语言,如VB.Net或C#编写代码。
下图显示了“设计”视图中的Web窗体:
让我们创建一个带有Web表单的新网站,该表单将显示用户点击按钮时的当前日期和时间。 执行以下步骤:
选择文件 - >新建 - > Web站点。将出现“新建网站”对话框。
选择ASP.Net空网站模板。 键入网站的名称,然后选择保存文件的位置。
您需要向站点添加默认页面。 右键单击解决方案资源管理器中的网站名称,然后从上下文菜单中选择添加新项目选项。 将显示“添加新项”对话框:
选择Web窗体选项并提供默认页面的名称。 我们把它保存为Default.aspx。 单击添加按钮。
默认页面显示在源视图中
通过向“值”添加值来设置“默认”网页的标题
要在网页上添加控件,请转到设计视图。 在表单上添加三个标签,一个文本框和一个按钮。
双击该按钮,并将以下代码添加到该按钮的Click事件:
Protected Sub Button1_Click(sender As Object, e As EventArgs) _Handles Button1.Click Label2.Visible = True Label2.Text = "Welcome to Tutorials Point: " + TextBox1.Text Label3.Text = "You visited us at: " + DateTime.Now.ToString()End Sub
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面:
输入您的姓名,然后点击提交按钮:
Web服务是一个Web应用程序,基本上是一个由其他应用程序可以使用的方法组成的类。它也遵循代码隐藏架构,如ASP.Net网页,虽然它没有用户界面。
.Net Framework的早期版本使用了ASP.Net Web Service的这个概念,它具有.asmx文件扩展名。然而,从.Net Framework 4.0开始,Windows通信基础(WCF)技术已经发展成为Web Services,.Net Remoting和一些其他相关技术的新继任者。它把所有这些技术结合在一起。在下一节中,我们将简要介绍Windows Communication Foundation(WCF)。
如果您使用先前版本的.Net Framework,您仍然可以创建传统的Web服务。有关详细说明,请参阅ASP.Net - Web服务详细说明。
Windows Communication Foundation或WCF提供了一个用于创建分布式面向服务的应用程序的API,称为WCF服务。
像Web服务一样,WCF服务也支持应用程序之间的通信。但是,与Web服务不同,此处的通信不仅限于HTTP。 WCF可以配置为通过HTTP,TCP,IPC和消息队列使用。支持WCF的另一个强点是,它提供对双工通信的支持,而对于Web服务,我们只能实现单工通信。
从初学者的角度来看,编写WCF服务与编写Web服务并不完全不同。为了保持简单,我们将看到如何:
创建一个WCF服务
创建一个服务合同并定义操作
执行合同
测试服务
使用该服务
要理解这个概念,让我们创建一个简单的服务,提供股价信息。客户可以根据股票代号查询股票的名称和价格。为了保持这个例子简单,这些值被硬编码在二维数组中。此服务将有两种方法:
GetPrice方法 - 它将返回股票的价格,基于提供的符号。
GetName方法 - 它将返回股票的名称,基于提供的符号。
创建WCF服务
执行以下步骤:
打开VS Express for Web 2012
选择新的网站,打开新建网站对话框。
选择模板列表中的WCF服务模板:
从Web位置下拉列表中选择文件系统。
提供WCF服务的名称和位置,然后单击“确定”。
创建一个新的WCF服务。
创建服务合同并定义操作
服务契约定义服务执行的操作。 在WCF服务应用程序中,您会发现在解决方案资源管理器中的App_Code文件夹中自动创建两个文件
IService.vb - 这将有服务合同; 在简单的话,它将有服务的接口,与服务将提供的方法的定义,您将在您的服务中实现。
Service.vb - 这将实现服务合同。
用给定的代码替换IService.vb文件的代码:
Public Interface IService <OperationContract()> Function GetPrice(ByVal symbol As String) As Double <OperationContract()> Function GetName(ByVal symbol As String) As StringEnd Interface
实施合同
在Service.vb文件中,您将找到一个名为Service的类,它将实现在IService接口中定义的服务契约。
使用以下代码替换IService.vb的代码:
' NOTE: You can use the "Rename" command on the context menu to change the class name "Service" in code, svc and config file together.Public Class Service Implements IService Public Sub New() End Sub Dim stocks As String(,) = { {"RELIND", "Reliance Industries", "1060.15"}, {"ICICI", "ICICI Bank", "911.55"}, {"JSW", "JSW Steel", "1201.25"}, {"WIPRO", "Wipro Limited", "1194.65"}, {"SATYAM", "Satyam Computers", "91.10"} } Public Function GetPrice(ByVal symbol As String) As Double _ Implements IService.GetPrice Dim i As Integer 'it takes the symbol as parameter and returns price For i = 0 To i = stocks.GetLength(0) - 1 If (String.Compare(symbol, stocks(i, 0)) = 0) Then Return Convert.ToDouble(stocks(i, 2)) End If Next i Return 0 End Function Public Function GetName(ByVal symbol As String) As String _ Implements IService.GetName ' It takes the symbol as parameter and ' returns name of the stock Dim i As Integer For i = 0 To i = stocks.GetLength(0) - 1 If (String.Compare(symbol, stocks(i, 0)) = 0) Then Return stocks(i, 1) End If Next i Return "Stock Not Found" End FunctionEnd Class
测试服务
要运行如此创建的WCF服务,请从菜单栏中选择Debug-> Start Debugging选项。 输出将是:
要测试服务操作,请从左窗格的树中双击操作的名称。 新的选项卡将显示在右窗格中。
在右窗格的“请求”区域中输入参数值,然后单击“调用”按钮。
下图显示了测试GetPrice操作的结果:
下图显示了测试GetName操作的结果:
使用服务
让我们在同一个解决方案中添加一个默认页面,一个ASP.NET Web窗体,我们将使用我们刚刚创建的WCF服务。
执行以下步骤:
右键单击解决方案资源管理器中的解决方案名称,并向解决方案添加新的Web表单。 它将被命名为Default.aspx。
在表单上添加两个标签,一个文本框和一个按钮。
我们需要添加一个服务引用到我们刚刚创建的WCF服务。 右键单击解决方案资源管理器中的网站,然后选择添加服务引用选项。 这将打开“添加服务引用”对话框。
在地址文本框中输入服务的URL(位置),然后单击执行按钮。 它使用默认名称ServiceReference1创建服务引用。 单击确定按钮。
添加引用为您的项目做了两个作业:
Partial Class _Default Inherits System.Web.UI.Page Protected Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Dim ser As ServiceReference1.ServiceClient = _ New ServiceReference1.ServiceClient Label2.Text = ser.GetPrice(TextBox1.Text).ToString() End SubEnd Class
当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面:
输入符号并单击获取价格按钮以获得硬编码的价格:
以下资源包含有关VB.Net的其他信息。 请使用它们获得有关此主题的更深入的知识。
Visual Basic Resources − VB.Net官方网站给你最新的消息,更新和下载。
Visual Basic .NET − Wiki页面提供有关Visual Basic .NET的简要说明。
Mono Support for VisualBasic.NET − 尝试在Linux / Unix上使用Mono运行VB.Net程序
XCode − Xcode是苹果的强大的集成开发环境,为Mac,iPhone和iPad创建出色的应用程序。
BitArray类管理位值的压缩数组,它表示为布尔值,其中true表示该位为(1),false表示位为off(0)。
它用于需要存储位但不提前知道位数。 您可以通过使用从零开始的整数索引来访问BitArray集合中的项目。
下表列出了BitArray类的一些常用属性:
属性 | 描述 |
---|---|
Count | 获取BitArray中包含的元素数。 |
IsReadOnly | 获取一个指示BitArray是否为只读的值。 |
Item | 获取或设置位在BitArray中特定位置的值。 |
Length | 获取或设置BitArray中的元素数。 |
S.N | 方法名称和用途 |
---|---|
1 | Public Function And (value As BitArray) As BitArray Performs the bitwise AND operation on the elements in the current BitArray against the corresponding elements in the specified BitArray. 对当前BitArray中的元素与指定的BitArray中的相应元素执行按位AND运算。 |
2 | Public Function Get (index As Integer) As Boolean Gets the value of the bit at a specific position in the BitArray. 获取位在BitArray中特定位置的值。 |
3 | Public Function Not As BitArray Inverts all the bit values in the current BitArray, so that elements set to true are changed to false, and elements set to false are changed to true. 反转当前BitArray中的所有位值,以便将设置为true的元素更改为false,将设置为false的元素更改为true。 |
4 | Public Function Or (value As BitArray) As BitArray Performs the bitwise OR operation on the elements in the current BitArray against the corresponding elements in the specified BitArray. 对当前BitArray中的元素与指定的BitArray中的相应元素执行按位或运算。 |
5 | Public Sub Set (index As Integer, value As Boolean ) Sets the bit at a specific position in the BitArray to the specified value. 将BitArray中特定位置的位设置为指定值。 |
6 | Public Sub SetAll (value As Boolean) Sets all bits in the BitArray to the specified value. 将BitArray中的所有位设置为指定的值。 |
7 | Public Function Xor (value As BitArray) As BitArray Performs the bitwise eXclusive OR operation on the elements in the current BitArray against the corresponding elements in the specified BitArray. 对当前BitArray中的元素与指定的BitArray中的相应元素执行逐位异或操作。 |
Module collections Sub Main() 'creating two bit arrays of size 8 Dim ba1 As BitArray = New BitArray(8) Dim ba2 As BitArray = New BitArray(8) Dim a() As Byte = {60} Dim b() As Byte = {13} 'storing the values 60, and 13 into the bit arrays ba1 = New BitArray(a) ba2 = New BitArray(b) 'content of ba1 Console.WriteLine("Bit array ba1: 60") Dim i As Integer For i = 0 To ba1.Count Console.Write("{0 } ", ba1(i)) Next i Console.WriteLine() 'content of ba2 Console.WriteLine("Bit array ba2: 13") For i = 0 To ba2.Count Console.Write("{0 } ", ba2(i)) Next i Console.WriteLine() Dim ba3 As BitArray = New BitArray(8) ba3 = ba1.And(ba2) 'content of ba3 Console.WriteLine("Bit array ba3 after AND operation: 12") For i = 0 To ba3.Count Console.Write("{0 } ", ba3(i)) Next i Console.WriteLine() ba3 = ba1.Or(ba2) 'content of ba3 Console.WriteLine("Bit array ba3 after OR operation: 61") For i = 0 To ba3.Count Console.Write("{0 } ", ba3(i)) Next i Console.WriteLine() Console.ReadKey() End SubEnd Module
Bit array ba1: 60 False False True True True True False False Bit array ba2: 13True False True True False False False False Bit array ba3 after AND operation: 12False False True True False False False False Bit array ba3 after OR operation: 61True False True True False False False False
哈希表Hashtable类表示基于密钥的哈希码组织的键 - 值对的集合。 它使用键来访问集合中的元素。
当您需要使用键访问元素时使用散列表,您可以标识有用的键值。 散列表中的每个项都有一个键/值对。 该键用于访问集合中的项目。
属性 | 描述 |
---|---|
Count | 获取Hashtable中包含的键 - 值对的数量。 |
IsFixedSize | 获取指示散列表是否具有固定大小的值。 |
IsReadOnly | 获取一个值,指示Hashtable是否为只读。 |
Item | 获取或设置与指定键相关联的值。 |
Keys | 获取包含该Hashtable中的键的集合。 |
Values | 获取包含在Hashtable中的值的集合。 |
S.N | 方法名称和用途 |
---|---|
1 | Public Overridable Sub Add (key As Object, value As Object ) 将具有指定键和值的元素添加到Hashtable中。 |
2 | Public Overridable Sub Clear 从哈希表中移除所有元素。 |
3 | Public Overridable Function ContainsKey (key As Object) As Boolean 确定哈希表是否包含特定键。 |
4 | Public Overridable Function ContainsValue (value As Object) As Boolean 确定哈希表是否包含特定值。 |
5 | Public Overridable Sub Remove (key As Object) 使用指定的键从哈希表中删除元素。 |
Module collections Sub Main() Dim ht As Hashtable = New Hashtable() Dim k As String ht.Add("001", "Zara Ali") ht.Add("002", "Abida Rehman") ht.Add("003", "Joe Holzner") ht.Add("004", "Mausam Benazir Nur") ht.Add("005", "M. Amlan") ht.Add("006", "M. Arif") ht.Add("007", "Ritesh Saikia") If (ht.ContainsValue("Nuha Ali")) Then Console.WriteLine("This student name is already in the list") Else ht.Add("008", "Nuha Ali") End If ' Get a collection of the keys. Dim key As ICollection = ht.Keys For Each k In key Console.WriteLine(" {0} : {1}", k, ht(k)) Next k Console.ReadKey() End SubEnd Module
006: M. Arif007: Ritesh Saikia008: Nuha Ali003: Joe Holzner002: Abida Rehman004: Mausam Banazir Nur001: Zara Ali005: M. Amlan
排序列表是数组和散列表的组合。 它包含可以使用键或索引访问的项目列表。 如果您使用索引访问项目,它是一个ArrayList,如果您使用键访问项目,它是一个Hashtable。 项目的集合始终按键值排序。
属性 | 描述 |
---|---|
Capacity | 获取或设置SortedList的容量。 |
Count | 获取SortedList中包含的元素数。 |
IsFixedSize | 获取指示SortedList是否具有固定大小的值。 |
IsReadOnly | 获取指示SortedList是否为只读的值。 |
Item | 获取并设置与SortedList中的特定键相关联的值。 |
Key | 获取SortedList中的键。 |
Values | 获取SortedList中的值。 |
S.N | 方法名称和用途 |
---|---|
1 | Public Overridable Sub Add (key As Object, value As Object) 将带有指定的键和值的元素添加到可排序列表。 |
2 | Public Overridable Sub Clear 从SortedList中删除所有元素。 |
3 | Public Overridable Function ContainsKey (key As Object) As Boolean 确定SortedList是否包含特定键。 |
4 | Public Overridable Function ContainsValue (value As Object) As Boolean 确定SortedList是否包含特定值。 |
5 | Public Overridable Function GetByIndex (index As Integer) As Object 获取SortedList的指定索引处的值。 |
6 | Public Overridable Function GetKey (index As Integer) As Object 获取SortedList的指定索引处的键。 |
7 | Public Overridable Function GetKeyList As IList 获取SortedList中的键。 |
8 | Public Overridable Function GetValueList As IList 获取SortedList中的值。 |
9 | Public Overridable Function IndexOfKey (key As Object) As Integer 返回SortedList中指定键的从零开始的索引。 |
10 | Public Overridable Function IndexOfValue (value As Object ) As Integer 返回SortedList中指定值的第一次出现的从零开始的索引。 |
11 | Public Overridable Sub Remove (key As Object) 从SortedList中删除具有指定键的元素。 |
12 | Public Overridable Sub RemoveAt (index As Integer) 删除SortedList的指定索引处的元素。 |
13 | Public Overridable Sub TrimToSize 将容量设置为SortedList中的实际元素数。 |
Module collections Sub Main() Dim sl As SortedList = New SortedList() sl.Add("001", "Zara Ali") sl.Add("002", "Abida Rehman") sl.Add("003", "Joe Holzner") sl.Add("004", "Mausam Benazir Nur") sl.Add("005", "M. Amlan") sl.Add("006", "M. Arif") sl.Add("007", "Ritesh Saikia") If (sl.ContainsValue("Nuha Ali")) Then Console.WriteLine("This student name is already in the list") Else sl.Add("008", "Nuha Ali") End If ' Get a collection of the keys. Dim key As ICollection = sl.Keys Dim k As String For Each k In key Console.WriteLine(" {0} : {1}", k, sl(k)) Next k Console.ReadKey() End SubEnd Module
001: Zara Ali002: Abida Rehman003: Joe Holzner004: Mausam Banazir Nur005: M. Amlan 006: M. Arif007: Ritesh Saikia008: Nuha Ali