VB.NET几点注意

发布时间:2007年06月04日      浏览次数:4274 次
Visual Basic.NET 程序设计
第一部分 (简介)
1. 使用菜单和对话框
1.1 菜单
菜单是由MainMenu控件创建的主菜单,使用菜单项(MenuItem)对象向MainMenu添加菜单项。
注意:若要创建子菜单,可将MenuItem对象添加到父MenuItem的MenuItem集合中
1.2 对话框
七个标准的对话框控件
OpenFileDialog、SaveFileDialog、FontDialog、ColorDialog、PrintDialog、PrintPreviwDialog、PageSetupDialog
使用ShowDialog方法和DialogResult属性来确定用户操作。
1.3 为菜单指定快捷健(shortcut key)
设定MenuItem的Shortcut属性就可以了!microsoft提供了许多的快捷健可以选择。
2. 使用工具箱控件
1.1 收集用户输入的控件(4个重要)
RadioButton(单选框)
CheckBox(复选框)
ListBox(列表框)
ComboBox(下拉列表框)
TextBox(文本框)
PictureBox(图片框)
1.2 LinkLabel控件
提供Web连接访问,使用system.Diagnostics.process(namespace)的start方法访问web网址。
3. Nothing 为一个object物件
Nothing 表示当前没有对象分配给变量。代码开始运行时,除了声明中包含赋值的对象变量,对象变量初始化为 Nothing
第二部分 (编程基础)
 所有的Visual Basic.NET变量都必须在使用前声明。只有在使用了Option Explicit Off语句时,才允许隐式声明变量(使用没有事先声明的变量)-不提倡这种方式
 Visual Basic.NET不在支持variant(变体)数据类型,需要用Dim语句来声明所有的变量,用关键词“as”定义变量所存储的数据类型。
 Visual Basic.NET包含一种新语句:Option Strict。使用该语句时,参与加减,比较或者混合运算的变量必须是同种类型(有时变量类型也可以不一样,只要这样不至于导致数据丢失即可)
 Visual Basic.NET不在提供用于数学运算的内部关键词(例如abs或者Cos)而是必须使用.NET框架中System.math类库中的方法来实现运算
 Visual Basic.NET中有一个Messagebox类,他代替了原来的Msgbox函数用于显示消息的对话框,可以使用Messagebox.show来显示一个对话框。
编写程序语句时必须遵守的规则叫语法(syntax)
变数命名约定:
 每个变量必须以字母开头,并且变量名不能包含有下划线(Visual Basic约定),变量名由字母,数字元元和下划线组成
 变量名的长度没有限制,但为了阅读方便,应该尽量保持在33字符以下
 如果条件允许,可以把几个单词连起来作为变量名,这样的变量具有更强的描述性,例如:变量名SalesTaxRate比Tax或者Rate更能清楚表达变数的用途(销售税金率)
 可以根据需要混合使用大小写字母和数字元元,一个不成文的规定,变量的首字母大写,例如:DateOfBirth。但是一些程序员更热衷于“Camel Casing”(小写首字母)方式,把变量名同函数名和模块名区分开。
 不要使用Visual Basic约定的关键词当做变量名。
 使用某些单词的缩写来表示变量存储的数据类型。例如:strname,这说明name存储的是string类型的变量。这个概念是由Charles Simonyi提出的,有时也叫Hungarian naming约定。
数据类型(特定)
数据类型 大小 范围 用法实例
Short 16位 -32768到32768
Integer 32位 -2147483648到2147483648
Long 64位 -2^63到2^63
Single 32位浮点 -3.4028…E38到3.4028…E38
Double 64位浮点 -1.79…E308 To 1.79…E308
Byte 8位 0 to 255
Char 16位 在0-65535范围内的符号(编码)
String 每个字符一字节 很多
Boolean 16位 True 或者False(0为false)
Date 64位 1001到31999
常量(constant)用于替代不变的数值或文本串的具有描述性的元素。例如:
Const pi As Double=3.14159265
操作 语言元素
算术 ^、-、*、/、\、Mod、+、=
赋值 =、^=、*=、/=、\=、+=、-=? &=
比较 =、<>、<、>、<=、>=、Like、is
串联 &、+
逻辑/按位运算 Not、And、Or、Xor、AndAlso、OrElse
其它运算 AddressOf、GetType
使用.NET框架中的数学方法
如果要对数值进行处理,这些方法是由NET框架提供的。.NET框架其实就是一个类库(Class Library)。存在于System.Math(NameSpace)中。
小结:
 从.NET框架中引用类库
Import System.Math
 使用对话框显示输出信息
Msgbox函数或者Messagebox.Show方法来显示对话框
 使用对话框来获取输入信息
使用InputBox函数,并将结果赋值给变量。
判断结构
Visual Basic.NET 新添加的两个逻辑运算符(andalso 和 orelse)
result = expression1 AndAlso expression2
如果 expression1 和 expression2 都计算为 True,则 result 为 True。如果 expression1 计算为 True,而 expression2 计算为 False,则 result 为 False。如果 expression1 计算为 False,则不计算 expression2,并且 result 为 False(称该运算符使表达式短路)
result = expression1 OrElse expression2
如果 expression1 和 expression2 中有一个计算为 True,则 result 为 True。如果 expression1 计算为 True,则不计算 expression2,并且 result 为 True(称该运算符已使表达式短路)。
Timer(计时器)控件
可以使程序按指定的时间间隔不断的执行某语句,timer控件就象一个秒表,利用它可以使程序访问系统时钟。
Interval 间隔时间(以毫秒为单位)
Enabled 激活计时器(false,true)
调试Visual Basic.NET程序
在Visual Basic.NET程序中可能发生3种类型的错误:
1. 语法错误(或者编译器错误)语法错误是一种编程错误(把属性或者关键字写错),这种错误违反了VB的语法规则
2. 运行时错误 在运行期间会导致程序意外终止运行的错误
3. 逻辑错误 逻辑错误是一种人为的错误,这种错误会导致程序得到错误的结果
要在命令窗口使用命令模式,可以在窗口模式下输入>cmd,要切换立即窗口,可以使用>immed。然后回车(return)
使用结构化错误处理程序捕获错误
使用try……catch结构处理错误,错误处理程序利用Try…Catch语句和名为Err的特殊的错误处理对象来处理和捕获错误。Err对象有两个属性:Number和Description。Number属性包含运行时错误编号,而Description属性包含错误信息的描述
 Try
包含可能产生运行错误的语句
 Catch
一旦运行错误发生就会被执行的语句
 Finally
不管错误是否发生都会被执行的语句(Optional)〔可选〕
 End Try
因为程序越来越复杂,所以需要编写更为复杂完善的Try…Catch错误程序程序。Try…Catch的复杂性是指:
 允许Try…Catch中有多行代码
 提供Catch When来处理特定的错误
 允许嵌套Try…Catch代码块,用于创建复杂且完善的错误处理程序
Err对象,特殊的Visual Basic对象。每次产生运行时错误时,该对象都会被赋予详细的错误处理信息。Number & Description是最有用的两个属性。Err.Number属性的值是最近发生错误的编号。
Description属性则包含运行时错误的描述
检测多个运行错误:
Try
可能产生运行时错误的语句
Catch When Err.Number
提示错误信息
…
Catch When Err.Number
提示错误信息
Catch
提示错误信息
End Try
Catch When用来捕获指定的错误,Catch用来捕获所有其他的错误,也就是Catch When并未指定的错误信息。如果Catch When一旦执行,Catch就不会执行了!
自定义错误函数
public function custonError(byval 自定义变量 as 数据类型) as Integer
dim count as integer=0
Try
可能产生运行时错误的语句
Catch
运行时错误处理程序
Count=1
End Try
Select Case Count
Case 0 ‘代表没有运行时错误
Return 0
Case 1 ‘代表有运行时错误发生
Return 1
End Select
End Function
可以反复运行该自定义错误处理函数,来检测用户是否已经纠正了执行错误。
错误处理程序和防错编程技术的比较
错误处理程序不是包含程序免受运行时错误困扰的唯一机制。还有种叫做验证技术(防错编程)if … then就是执行验证技术的语句。
补充:Exit Try语句(快捷的中断语句)
用于提前推出Try…Catch代码块。Exit Try可以实现完全跳出Try 或者Catch代码块。如果代码块中有Finally,则该子句还是要执行的
小结:
本章学习的Try…Catch(处理运行时错误的结构化语句),可以使用Catch When来实现处理特定的错误,搭配Err.Number来实现。
使用模块和过程
标准模块(standard module)。它是个程序中的一个单独的容器,轻重刻意包含全局变量(或称公共变量),函数过程和子过程。
Module
…
End Module
 Visual Basic.NET改变了参数传递到过程的方式。默认是ByVal(即过程内部参数的改动不会被传送回调用的例程)传值方式。还有种ByRef(即过程内部参数的改动会被传会调用的例程)引用方式。
 在Visual Basic.NET中调用过程,所有的参数都必须用括号括起来-即使过程不需要参数。
 使用return来返回结果给函数,或者给函数赋值。
编写函数过程
函数过程位于Function…End Function之间。
Function FunctionName([arguments]) as DataType
Function statements
[return value]
End Function
编写子过程(sub)
子过程和函数基本类似,唯一的区别就是过程不能通过过程名返回值。子过程同样可以在调用期间处理和返回变量,并可通过其参数将函数值返回给调用例程。
Sub procedureName([arguments]) [ pr5siVE ]
Porcedure statements
End Sub
如何决定选用ByVal 还是 ByRef
1. 当不需要在调用过程中修改通过参数传递到过程的变量时,使用ByVal
2. 当需要在调用过程中修改通过参数传递到过程的变量时,使用ByRef
3. 不确定的使用,使用ByVal
使用数组和集合管理数据
元素数固定的数组成为定长数组(Fixed array),元素可变的数组称为动态数组(dynamic array)
定长数组
Dim ArrayName(dim1index,dim2index,……) as DataType
 ArrayName是数组变量名
 Dim1index是第一维的上限值,等于其元素减1。
 Dim2index是第二维的上限值,等于其元素减1。
 DataType是数组中存储的数据的类型
数组的下限值总是0,上限值可以用Ubound(数组名)来返回。
动态数组(dynamic array)
Dim ArrayName() as DataType
使用ReDim来重新来定义数组的大小,重新定义以后,数组里的数据全部丢失。只能重新定义的数组维度的上限,维度必须于原数组一致。不能改变数组的维度
使用ReDim Preserve 来保存数组中的数据。
 ReDim 语句用来更改已被正式声明的数组的一个或多个维度的大小。ReDim 无法更改该数组的秩(维度数目)。
 ReDim 语句无法更改数组变量的数据类型,或无法提供数组元素的新初始化值。
 ReDim 释放现有数组并且创建具有相同秩的新数组。除非指定 Preserve,否则新数组的元素初始化成它们的数据类型的默认值。
 如果包含 Preserve 关键字,Visual Basic 将这些元素从现有数组复制到新数组。使用 Preserve 时,只可以重新调整数组的最后维度的大小,对于其他每个维,必须指定它在现有数组中已经具有的相同大小。
 例如,如果数组只有一维,可以重新调整该维度并依然保留该数组的内容,因为它是最后的和唯一的维度。然而,如果数组具有两个或多个维度,则如果使用 Preserve 将仅可以更改最后维度的大小。
使用对象集合
一个集合就是一组相关联的对象,用于在Visual Basic程序中来处理控件对象和其他数据。在Visual Basic术语中,窗体上的所有对象合称为控件集合(controls)。程序中的每个集合都有唯一的名称。因此可以在程序代码中可以将其作为一个独立单元。
引用集合中的对象
如果指定了一个对象在集合中的索引位置,就能在程序中使用集合内的对象。Visual Basic按照程序创建对象的相反顺序在集合中存储对象。因此索引0就是最后一个创建的对象。
For Each element In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
element
必选项。变量。用于叠代通过集合或数组的元素。element 的数据类型必须是 group 元素的数据类型能够隐式转换到的类型。
group
必选项。对象变量。必须引用对象集合或数组。
statements
可选项。在 For Each 和 Next 之间的针对 group 中的每项执行的一条或多条语句。
创建自己的集合
Visual Basic.NET允许创建自定义集合来跟踪程序中的数据并系统对数据进行处理。尽管集合通常用来存储对象。例如用户界面上的控件对象,但是也可以用来在程序运行期间存储数值或者字符串,因此集合是数组的一种补充。
Collection 对象是可作为一个单元引用的一组有序项。
声明自定义集合
Dim CollectionName as New Collection()
使用add方法来添加集合的Item项
处理文本文件和字符串
打开文件
FileOpen(句柄,文件名,打开方式)
FileClose(句柄) 关闭由FileOpen()打开的文件。
 检查是否到达文件末尾 EOF(句柄)
While not EOF(1)
statements
END While
将格式化的显示数据写入顺序文件。
Public Sub Print( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘自动换行
- 或 -
Public Sub PrintLine( ByVal FileNumber As Integer, _
ByVal ParamArray Output() As Object ) ‘写一次换一行
一.用 Print 写入的数据通常由 LineInput 或 Input 从文件中读取。
 Public Sub Input(FileNumber As Integer, ByRef Value As Object ) 从打开的顺序文件中读取数据并将数据分配给变量
 Public Function LineInput(ByVal FileNumber As Integer) As String 从打开的顺序文件中读取一行数据并将它赋给 String 变量。
对文本进行排序
ASCII是American Standard Code for Information Interchange的英文缩写,全称为美国信息交换标准码。例如“a”对应的ASCII码就是97,“A”对应的ASCII码就是65。
 得到对应字符的ASCII,使用ASC(number as integer)函数
 得到对应数字的字符,使用Chr( chrvalue as char)函数
我编写的排序函数,将一个随便输入的字符串型的数组进行排序,使用值引用型
Sub largeValue(ByRef sort() As String) '排序(按升序)如果要降序可以将">"改成"<"
Dim lenge, spin, j, i As Short
Dim temp As String
spin = 1 'spin 代表的是比较的初始值,从第二个元素开始比较
lenge = UBound(sort) '数组的下标
For j = 0 To lenge – 1
For i = spin To lenge
If sort(j) > sort(i) Then
temp = sort(j)
sort(j) = sort(i)
sort(i) = temp
End If
Next i
spin = spin + 1
Next j
End Sub
补充知识:使用Xor运算符
对两个 Boolean 表达式执行逻辑异或运算,或对两个数值表达式执行按位异或运算。
result = expression1 Xor expression2
 对于Boolean表达式,有且只有一个为真才为真。
 对于两个数值表达式按位进行异或运算。
例如:10 Xor 8 result=2(1010 xor 1000)按位异或运算
部署Visual Basic.NET应用程序
Visual Basic.NET应用程序是对程序集本身进行编译的,程序集是包含程序运行所必须的文件的部署单元,程序集的内容包含了很多必要的信息,因此Visual Studio.NET应用程序无须在操作系统中正式注册,Visual Basic.NET应用程序很容易安装,使用Xcopy既可以安装,只有另一台电脑上有.net框架即可。但是用户更倾向于有图形界面的安装程序,也更受欢迎。而且通常需要在操作系统中注册应用程序,以便在“控制面板”中的“添加/删除程序”卸载程序。
在发布应用程序的时候,Visual Basic.NET提供了几中不同的方法了解决部署问题:
1. 将应用程序安装到你的计算机上,并在Windows系统中进行注册
2. 创建一个允许通过局域网或者Internet安装应用程序的安装程序
3. 使用一张或多张光盘来部署应用程序
4. 使用压缩文件(*.CAB)部署应用程序。压缩技术可以实现使用Web浏览器下载文件。
高级用户界面设计-管理Windows窗体
对话框在Visual Basic中叫做有模窗体(Modal),它显示在屏幕上时,用户必须对它进行处理(定位文件,填写内容,单击OK等等),否则它将始终保持为活动窗口(即必须响应),使用ShowDialog方法来打开。
System.Windows.Form.ShowDialog返回值是Dialogresult类型
可以给响应窗口设置Dialogresult属性(OK,Yes,No等)
对于其他的非模式窗体或者无模式窗体(nonmodal & modelless)使用Show来打开窗体,使用Close()方法来关闭窗体。
在Windows桌面上安排窗体位置
 Visual Basic.NET使用了一个新的属性--DeskopBounds(必须在运行中才能读取&设置);由于DesktopBounds属性以矩形结构作为参数(X,Y,Width,Height),所以它可以设置窗体的大小,也可以设置在桌面的位置。
 也可以使用Form.StartPosition属性,它有五个参数Manual,CenterScreen,
WindowsDefaultLocation(Windows默认值),WindowsDefaultBounds(Windows默认边界)&
CenterParent(父窗口中央)
 如果设置Form.StartPosition=FormStartPosition.Manual,,然后可以使用Location或者Left(y),Top(x)来定位窗体的位置,Location它有两个参数(x,y)
在窗体上排列控件
 使用Anchor(锚点)属性和Dock(停靠)属性,前者强迫窗体上的对象于窗体的某个特定边缘保持固定距离,后者强迫对象与窗体边缘保持接触。
补充知识:指定启动对象
通过调整项目的属性页对话框中的设置,就可以对其进行更改。但是还有一种办法:指定Visual Basic首先执行名为Sub Main的过程。该过程可以声明公共变量,并在一系列特定测试完成以后载入一个或者多个窗体。
添加图形和动画效果(使用System.Drawing命名空间)
 Visual Basic 6中的关键字Circle,Line和Pset已经被System.Drawing.Craphics类中的DrawEllipse(椭圆)和DrawLine以及被Point()代替
 Visual Basic.NET中的默认坐标系统是现在以像素为单位,不是缇。
 更新空间的位置可以使用Location或者Le 更新空间的位置可以使用Location或者Left(x) & Top(y)来定位,或者使用
SetBound(x,y,width,height)
 如果计划在一个复杂的动画效果中成千上百万次移动一个对象,Visual Basic.NET的设计者建议不要使用两条程序来来定位对象,Microsoft推荐使用Location属性。
继承窗体和创建基类
在面向对象的编程(OOP)中,继承以为着一个类接受另一个类的对象,属性,方法和其他特性
Inherits System.Windows.Forms.Form
例如在每个新建窗体的最上端都要这么一行代码,代表继承Forms类库中的form窗体。
类在面向对象的编程中很重要,因为类使您可以将相关项分组在一个单元中并控制对于其他过程这些项的可见性和可访问性。类还可以继承和重复使用在其他类中定义的代码。
 创建属性
一个GET代码块(它决定了程序员检查属性的时候会看到什么),一个SET代码块(它决定了设置或者更改属性时会发生什么),还有一个End Property语句来结束属性过程。
 创建方法
就是建立过程或者函数(Sub & Function)
使用ADO.NET
ADO.NET通过一个名为CurrencyManager的对象来持续跟踪当前记录的有关信息和记录总数。每个数据集都有一个CurrencyManager对象。而且每个Windows窗体也都有一个跟踪窗体上所有CurrencyManager对象的BindingContext对象。
Windows 窗体控件绑定到的任何数据源将都具有一个关联的 CurrencyManager 对象。CurrencyManager 对象跟踪位置,另外监控对该数据源的绑定。对于当前绑定到的每个离散数据源,在窗体上都有一个 CurrencyManager 对象。如果窗体上的所有控件都绑定到一个源(例如,如果几个 TextBox控件绑定到同一数据表),那么它们将共享同一个 CurrencyManager。但是,有时窗体上的控件将绑定到不同的源。在这种情况下,窗体上有多个 CurrencyManager 对象,每个都跟踪控件正在使用哪个记录或数据元素。
另外,每个 Windows 窗体都有一个 BindingContext 对象。BindingContext 对象跟踪窗体上的所有 CurrencyManager 对象。因此,任何具有数据绑定控件的 Windows 窗体都至少有一个跟踪一个(或多个)CurrencyManager 对象的 BindingContext 对象,而每个 CurrencyManager 对象又跟踪一个数据源。如果使用容器控件,如 GroupBox、Panel 或 TabControl 来包含数据绑定控件,则可以只为该容器控件及其控件创建一个 BindingContext。这使窗体的各个部分都由它自己的 CurrencyManager 对象来管理。有关为同一数据源创建多个 CurrencyManager 对象的更多详细信息,请参阅 BindingContext 构造函数。
Internet Explorer对象不是一个包括在Visual Basic.NET工具箱中的控件,它是一个标准的COM库,驻留于所有拥有Internet Exporler已安装副本的系统中
如果想在程序中使用Internet Explorer事件,首先需要修改程序代码中声明Internet Explorer变量语句。由COM组件生成的事件并不转动列在代码编辑器的〔方法名称〕下拉列表框。然而,可以在变量声明时通过使用WithEvents关键字来将这些事件包括其中。
例如:
Public WithEvents Explorer As SHDocVw.InternetExplorer
声明了一个Explorer变量(全局变量)。便可以使用Explorer来使用Internet Explorer所有的事件,并可以编写事件程序,进一步控制Internet Explorer(浏览器)。
文章来源:http://www.blueidea.com/bbs/newsdetail.asp?id=1047206
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!