-
VB程序错误处理方法
2014-05-03 13:11:37现实上可能泛起的顺序错误是许多的,但是它们基本上可以分为两种类型:一种是编译错误;另一种是运行期错误。编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。假如一个历程中包含了...大家知道,即使顺序员抱有最好的愿望,而且计划工作做得非常周密,也无法防止代码泛起错误。现实上可能泛起的顺序错误是许多的,但是它们基本上可以分为两种类型:一种是编译错误;另一种是运行期错误。编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。假如一个历程中包含了编译错误,VB将不执行该历程,并且我们也不能向用户提供带有编译错误的运行期版本应用顺序,大多数编译错误是句法错误造成的。
1、VB的编译选项
VB有两个设置项会在很大程度上影响我们创建非常坚固的代码的能力。一个设置项是Compile On Demand(按需要进行编译),另一个设置项是Background Compile(后台编译)。可以打开Options对话框,选定General选项卡,然后对这两个设置项进行设置,如下图1所示。当选定Compile On Demand时,假如单击对象栏上的Run按钮,或者按F5键,VB并不齐面编译我们的项目。相反,只在引用历程时,才对这些历程进行编译。使用Compile On Demand,通常可使比较大的项目或者速度较慢的计算机上的项目能够更快地启动运行,但是它也会产生某些不被注意的编译错误。在发现和纠正所有编译错误之前,不能将项目编译成.exe或.dll之类的可发布文件,因此,选定Compile On Demand并不能够发布带有编译错误的代码。但是,选定Compile On Demand后,会导致编译错误随着时间的推移而不断增加,从而在最后试图进行齐面编译时,迫使我们对代码进行大量的纠错。假如在IDE中调试项目,VB常常必须制止(不只是停息)运行,以便进行纠错操作。这使得调试正在运行的项目时对大量编译错误的纠正操作变得非常麻烦。假如能够在合理的时间内齐面编译项目,那么可以思量关闭Compile On Demand。也可使Compile On Demand保持选定状态,但是要定期按Ctrl+F5键,以便重新运行我们的项目。这使我们在编程时能够定期纠正编译错误,而不必一次性纠正大量的编译错误。
图1 编译时选中Compile On Demand和Background Compile两个选项2、Err对象
1、使用On Error Resume Next以忽略错误
对错误进行处理的最简单(和最危险)的方法是使用On Error Resume Next语句。On Error Resume Next语句规定,代码中的错误将完齐被忽略,存在错误的代码行被跳过,然后继续执行下一个语句。例如,下面这个历程存在一个运行期错误(即一个被0除的错误),它由On Error Resume Next错误处理顺17173序来处理:属性说明Number 用于标识该错误的公用号码 Source 当前VB项目的名字 Description 表义性的错误动静。假如某个错误没有这个字符串,本属性就会指明"应用顺序定义的错误或对象定义的错误" HelpFile 与错误相关的VB 帮助文件所在的驱动器、路径和文件名 HelpContext VB 帮助文件用于该错误的上下文ID LastDLLError 在32位Microsoft Windows操作系统上,上次调用动态链接库(DLL)的系统错误代码。LastDllError属性是只读属性
三、错误处理顺序的类型
将一个项目看成已经编译的顺序运行时,未捕获的错误解造成致命的后果,它们会导致顺序终止运行。必须尽一切尽力防止发生这种情况。若要防止代码中的错误中断代码的运行(并终止已编译顺序的运行),我们可以创建错误处理顺序以捕获代码中的错误。当捕获一个错误后,VB并不表现犯错动静,也不终止代码的运行。相反,我们编写的专门用来处理错误的代码则开始运行。每个历程都应该拥有错误处理顺序,而不管它包含多大的代码量。最好在代码中放入一个On Error语句,作为代码的第一行,放在紧靠历程题目的后面和变量说明的前面。假如一个历程的错误能够以这种体例泛起,就应该在历程的开头用凸起的注释来明确说明这一行为特性。
若要捕获错误,基本上可使用下面两种方法:
当泛起错误时,使用On Error GoTo,转移到别的代码上往执行。
使用On Error Resume Next语句,不中断代码的执行,也不转移到别的代码上往执行,而是忽略该错误。
可以在一个历程中创建多个错误处理顺序,但每次只能激活一个错误处理顺序。VB将最新的On Error语句中指明的处理顺序视为已经激活的错误处理顺序。切换一个历程中的不同位置上的错误处理顺序,往往是很有好处的,理解各个错误处理顺序如何运行,是利用这一功能的关键。在能够编写有效的错误处理代码之前,我们必须了解VB的Err对象,这是个运行期对象,它包含了关于最新错误的信息。当顺序运行时遇到一个错误,或者当我们使用Err对象的Raise方法故意引发一个错误时,便形成Err对象的属性。当遇到On Error语句(比如On Error Resume Next),并且在使用Exit Sub、Exit Function或Exit Property语句退出一个历程后,Error对象的属性值就被清除。若要显式清除Err对象,可以调用它的Clear方法。下表1列出了Err对象的属性。
Private Sub cmdGenerateError_Click()
'* Purpose: Test On Error Resume Next
On Error Resume Next
Debug.Print 10 / 0
End SubDebug.print语句产生了一个被0除的错误。但是,由于存在一个已经激活的错误处理顺序(由On Error Resume Next指定),因此该错误被忽略,并在下一个语句(即End Sub语句)上恢复执行。错误被忽略并不意味着我们无法知道错误已经发生。当一个语句产生了一个错误之后,尽管没有表现犯错动静,Err对象仍然包含关于该错误的信息。
2、使用On Error GoTo转移执行的代码流
除非我们捕获了一个意料以外的错误,比如上面代码中的那种错误,否则忽略代码中的错误是非常危险的,并且是一种不得已时采用的法子。当一个历程中泛起了意料以外的错误时,该历程就会产生许多问题。假如忽略该错误,就会对用户产生严重的影响,比如数据没有保存,或者保存不正确。许多情况下,当泛起代码错误时,必须执行某些操作,将代码的执行转移到On Error GoTo语句中指定的错误处理顺序。该语句的句法如下:On Error GoTo line 请注意,line必须是指与On Error GoTo语句相同的历程中的一个语句。
在这个句法中, line有两个意思。首先它是指泛起错误时要转移到的这个代码行号。不过这个行号并不是历程中的代码行的物理位置。请看下面这个代码例子:Private Sub TestErrorHandler()
'* Purpose : Test the On Error GoTo statement by deliberately
'* generating a run-timeerror.
On Error GoTo 4
Debug.Print "Line 2"
Debug.Print 10 / 0
Debug.Print "Line 4"
Debug.Print "Line 5"
End Sub3、用调试体例激活错误处理顺序和打消其激活状态
虽然我们不进展已编译顺序中的错误不被捕获,但是,当顺序在IDE中运行时假如泛起错误,让VB中止代码的执行,这样做常常是非常不利的。现代码的执行中止时,会看到一条相关的犯错动静,并告诉我们泛起错误的代码行,这对于代码的调试来讲是大有帮助的。VB为处理代码设计时遇到的错误而使用的方法取决于VB IDE的Error Trapping(捕获错误)属性。Error Trapping属性是VB环境的一个属性,不是某个项目的属性。我们操作的每个项目,即使在关闭和重新启动VB之后,均使用该设置值。若要为VB的当前会话设置Error Trapping选项,而不必为将来的会话修改默认值,请使用代码窗口的快捷菜单上的Toggle命令(见图2)。
图2 从任何代码窗口的快捷菜单中选择Toggle命令
可以将Error Trapping属性设置为下列值中的一个:
Break On All Errors(在所有错误上中止)。
Break In Class Module(在类模块中中止)。
Break On Unhandled Errors(在未处理的错误上中止)。
Break On All Errors现实上可使所有错误处理顺序均打消激活状态。当泛起一个错误时,无论是否激活了处理顺序,代码均在犯错的语句上进入中止体例,同时VB表现一条犯错动静。这使我们能够在IDE进行测试时处理意料不到的错误。我们可能认为,被0除的错误解导致代码在输出文本line 4这个语句上继续执行,因为这是代码的第四个语句(不是计数注释)。不仅这种情况不会发生,而且该代码现实上会导致产生一个编译错误,并且代码根本不会执行。
-
VB中利用API函数实现特殊窗体的两种方法
2007-08-12 21:51:00交通部水运所安全环保工程部冯新强---- 在VB集成开发环境(IDE)中,设计程序时所新建、添加的窗体都是矩形的。如果出于某种需要,想让窗体在运行时呈现出特殊的形状,就必须借助API函数编写相应的代码。 ---- [方法...交通部水运所安全环保工程部
冯新强
---- 在VB集成开发环境(IDE)中,设计程序时所新建、添加的窗体都是矩形的。如果出于某种需要,想让窗体在运行时呈现出特殊的形状,就必须借助API函数编写相应的代码。
---- [方法一]使用区域创建函数
---- 常用的区域创建函数有:
---- CreateEllipticRgn '创建一个椭圆或圆形区域
---- CreateRoundRectRgn '创建一个圆角矩形区域
---- CreatePolygonRgn '创建一个由一系列点围成的区域
---- CombineRgn '将两个区域组合为一个新区域
---- SetWindowRgn '设置新的窗口区域。
---- 通过CombineRgn可以取两个区域的并集、交集等组合,从而创建出复杂形状的窗体。
---- 例程1得到的窗体是两个相连的月牙形:
---- '例程1
Option Explicit
'API声明
Private Declare Function CreateEllipticRgn Lib "gdi32" _
(ByVal x1 As Long, ByVal Y1 As Long, _
ByVal x2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" _
(ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" _
(ByVal hWnd As Long, ByVal hRgn As Long, _
ByVal bRedraw As Boolean) As Long
'常数声明
Const RGN_XOR = 3
Private Sub Form_Load()
Dim x1, x2
x1 = CreateEllipticRgn(100, 100, 400, 400)
x2 = CreateEllipticRgn(200, 100, 500, 400)
CombineRgn x1, x1, x2, RGN_XOR
SetWindowRgn hWnd, x1, 1
End Sub
---- [方法二]使用BeginPath、EndPath、TextOut、PathToRegion等函数
---- BeginPath函数调用启动一个路径分支,在这个命令后执行的GDI绘图命令会自动成为路径的一部分,Windows95中合法的路径函数有文本绘图函数TextOut、绘制多边形函数Polygon等。
---- EndPath函数用于结束定义一个路径,如果调用成功,BeginPath函数和它之间发生的所有绘图操作都将在指定设备场景的路径中生效。BeginPath函数一般与EndPath函数成对出现。
---- PathToRegion函数调用将当前选定的路径转换到指定区域中。
---- TextOut函数的声明如下:
Declare Function TextOut Lib "gdi32" Alias
"TextOutA" (ByVal hdc As Long, ByVal x As
Long, ByVal y As Long, ByVal lpString As
String, ByVal nCount As Long) As Long
---- 参数说明如下:
---- hdc :设备场景的句柄 ;
---- x,y :绘图的起点,采用逻辑坐标 ;
---- lpString:欲绘制的字串 ;
---- nCount:字串中要绘制的字符数量,一个汉字的字符数量为2 。
---- 例程2生成一个宋体的“国”字形的窗体:
---- '例程2
Option Explicit
'类型声明
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'API声明
Private Declare Function BeginPath Lib "gdi32" _
(ByVal hdc As Long) As Long
Private Declare Function TextOut Lib "gdi32" _
Alias "TextOutA" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long, _
ByVal lpString As String, _
ByVal nCount As Long) As Long
Private Declare Function EndPath Lib "gdi32" _
(ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" _
(ByVal hdc As Long) As Long
Private Declare Function GetRgnBox Lib "gdi32" _
(ByVal hRgn As Long, lpRect As RECT) As Long
Private Declare Function CreateRectRgnIndirect Lib "gdi32" _
(lpRect As RECT) As Long
Private Declare Function CombineRgn Lib "gdi32" _
(ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
ByVal hSrcRgn2 As Long, _
ByVal nCombineMode As Long) As Long
Private Const RGN_AND = 1
Private Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" _
(ByVal hwnd As Long, ByVal hRgn As Long, _
ByVal bRedraw As Boolean) As Long
Private Declare Function ReleaseCapture Lib "user32" _
() As Long
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
'窗体代码
Private Sub Form_Load()
Dim hRgn1, hRgn2 As Long
Dim rct As RECT
With Me
.Font.Name = "宋体"
.Font.Size = 200
.FontTransparent=true
'读者可设置为False观察其效果
End With
BeginPath hdc
'为窗体形状产生路径
TextOut hdc, 10, 10, "国", 2
EndPath hdc
hRgn1 = PathToRegion(hdc)
'将指定路径转换为区域
GetRgnBox hRgn1, rct
'获取完全包含指定区域的最小矩形
hRgn2 = CreateRectRgnIndirect(rct)
'创建rct确定的矩形区域
CombineRgn hRgn2, hRgn2, hRgn1, RGN_AND
DeleteObject hRgn1
'删除GDI对象,释放占用的系统资源
SetWindowRgn hwnd, hRgn2, 1
End Sub
Private Sub Form_MouseDown
(Button As Integer, Shift _
As Integer, X As Single, Y As Single)
'移动窗体
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN,
HTCAPTION, 0
End Sub
Private Sub Form_DblClick()
'卸载窗体
Unload Me
End Sub
---- 如果想得到各种图案窗体,可以将窗体字体属性设置为Webdings、Wingdings、Wingdings1、Wingdings2、Wingdings3、Monotype Sorts等,这些字体中包含大量的图形字符,例如,Webdings字体下,代码“TextOut hdc, 10, 10, "J", 1”可以得到风景画轮廓的窗体;Windings字体下,代码“TextOut hdc, 10, 10, "(", 1 ” 可以得到电话形状的窗体。通过Windows附件中的字符映射表能够方便地浏览或选择、复制适用的字符。需要提醒的是,程序运行的机器中必须装有该字体。
---- 对比两种方法,方法一适合于创建几何形状简单的窗体,复杂的窗体理论上虽然可以实现,但操作起来比较困难。方法二简单易行,虽然有一定的局限性,但能够使窗体具有各种字体中各个字符的形状(你甚至可以利用造字程序自己“画”一些图形),还是很令人兴奋的。
---- 创建特殊窗体时,需要注意以下几点: 1.如果窗体的Borderstyle属性没有设置为None,即使运行时标题栏不可见,但相应的键盘操作如“Alt+空格键”、“Alt+F4”等依然有效;如果Borderstyle属性为None,最小化、窗体移动、退出等功能就必须编写相应的代码来实现。当然,使用特殊窗体制做软件封面就不需要考虑那么多了。 2.因为没有常规矩形窗体的立体边框效果,窗体的背景色应尽量采用醒目的颜色。 3.特殊窗体的使用必须得当,用的好自然锦上添花,否则给人以哗众取宠之感。 -
(转)VB程序错误处理方法小结
2009-01-20 12:13:00实际上可能出现的程序错误是很多的,但是它们基本上可以分为两种类型:一种是编译错误;另一种是运行期错误。 编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。如果一个过程中包含了...大家知道,即使程序员抱有最好的愿望,而且计划工作做得非常周密,也无法避免代码出现错误。实际上可能出现的程序错误是很多的,但是它们基本上可以分为两种类型:一种是编译错误;另一种是运行期错误。
编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。如果一个过程中包含了编译错误,VB将不执行该过程,并且我们也不能向用户提供带有编译错误的运行期版本应用程序,大多数编译错误是句法错误造成的。一、VB的编译选项
VB有两个设置项会在很大程度上影响我们创建非常坚实的代码的能力。一个设置项是Compile On Demand(按需要进行编译),另一个设置项是Background Compile(后台编译)。可以打开Options对话框,选定General选项卡,然后对这两个设置项进行设置,如下图1所示。当选定Compile On Demand时,如果单击工具栏上的Run按钮,或者按F5键,VB并不全面编译我们的项目。相反,只在引用过程时,才对这些过程进行编译。使用Compile On Demand,通常可使比较大的项目或者速度较慢的计算机上的项目能够更快地启动运行,但是它也会产生某些不被注意的编译错误。
在发现和纠正所有编译错误之前,不能将项目编译成.exe或.dll之类的可发布文件,因此,选定Compile On Demand并不能够发布带有编译错误的代码。但是,选定Compile On Demand后,会导致编译错误随着时间的推移而不断增加,从而在最后试图进行全面编译时,迫使我们对代码进行大量的纠错。如果在IDE中调试项目,VB常常必须停止(不只是暂停)运行,以便进行纠错操作。这使得调试正在运行的项目时对大量编译错误的纠正操作变得非常麻烦。如果能够在合理的时间内全面编译项目,那么可以考虑关闭Compile On Demand。也可以使Compile On Demand保持选定状态,但是要定期按Ctrl+F5键,以便重新运行我们的项目。这使我们在编程时能够定期纠正编译错误,而不必一次性纠正大量的编译错误。
图1 编译时选中Compile On Demand和Background Compile两个选项二、Err对象
在能够编写有效的错误处理代码之前,我们必须了解VB的Err对象,这是个运行期对象,它包含了关于最新错误的信息。当程序运行时遇到一个错误,或者当我们使用Err对象的Raise方法故意引发一个错误时,便形成Err对象的属性。当遇到On Error语句(比如On Error Resume Next),并且在使用Exit Sub、Exit Function或Exit Property语句退出一个过程后,Error对象的属性值就被清除。若要显式清除Err对象,可以调用它的Clear方法。下表1列出了Err对象的属性。属性说明Number 用于标识该错误的专用号码 Source 当前VB项目的名字 Description 表义性的错误消息。如果某个错误没有这个字符串,本属性就会指明"应用程序定义的错误或对象定义的错误" HelpFile 与错误相关的VB 帮助文件所在的驱动器、路径和文件名 HelpContext VB 帮助文件用于该错误的上下文ID LastDLLError 在32位Microsoft Windows操作系统上,上次调用动态链接库(DLL)的系统错误代码。LastDllError属性是只读属性 三、错误处理程序的类型
将一个项目当作已经编译的程序运行时,未捕获的错误会造成致命的后果,它们会导致程序终止运行。必须尽一切努力防止发生这种情况。
若要防止代码中的错误中断代码的运行(并终止已编译程序的运行),我们可以创建错误处理程序以捕获代码中的错误。当捕获一个错误后,VB并不显示出错消息,也不终止代码的运行。相反,我们编写的专门用来处理错误的代码则开始运行。每个过程都应该拥有错误处理程序,而不管它包含多大的代码量。最好在代码中放入一个On Error语句,作为代码的第一行,放在紧靠过程标题的后面和变量说明的前面。如果一个过程的错误能够以这种方式出现,就应该在过程的开头用突出的注释来明确说明这一行为特性。
若要捕获错误,基本上可以使用下面两种方法:
当出现错误时,使用On Error GoTo,转移到别的代码上去执行。
使用On Error Resume Next语句,不中断代码的执行,也不转移到别的代码上去执行,而是忽略该错误。
可以在一个过程中创建多个错误处理程序,但每次只能激活一个错误处理程序。VB将最新的On Error语句中指明的处理程序视为已经激活的错误处理程序。切换一个过程中的不同位置上的错误处理程序,往往是很有好处的,理解各个错误处理程序如何运行,是利用这一功能的关键。1、使用On Error Resume Next以忽略错误
对错误进行处理的最简单(和最危险)的方法是使用On Error Resume Next语句。On Error Resume Next语句规定,代码中的错误将完全被忽略,存在错误的代码行被跳过,然后继续执行下一个语句。例如,下面这个过程存在一个运行期错误(即一个被0除的错误),它由On Error Resume Next错误处理程序来处理:Private Sub cmdGenerateError_Click()
'* Purpose: Test On Error Resume Next
On Error Resume Next
Debug.Print 10 / 0
End SubDebug.print语句产生了一个被0除的错误。但是,由于存在一个已经激活的错误处理程序(由On Error Resume Next指定),因此该错误被忽略,并在下一个语句(即End Sub语句)上恢复执行。错误被忽略并不意味着我们无法知道错误已经发生。当一个语句产生了一个错误之后,尽管没有显示出错消息,Err对象仍然包含关于该错误的信息。
2、使用On Error GoTo转移执行的代码流
除非我们捕获了一个意料之外的错误,比如上面代码中的那种错误,否则忽略代码中的错误是非常危险的,并且是一种不得已时采用的办法。当一个过程中出现了意料之外的错误时,该过程就会产生许多问题。如果忽略该错误,就会对用户产生严重的影响,比如数据没有保存,或者保存不正确。许多情况下,当出现代码错误时,必须执行某些操作,将代码的执行转移到On Error GoTo语句中指定的错误处理程序。该语句的句法如下:On Error GoTo line 请注意,line必须是指与On Error GoTo语句相同的过程中的一个语句。
在这个句法中, line有两个意思。首先它是指出现错误时要转移到的这个代码行号。不过这个行号并不是过程中的代码行的物理位置。请看下面这个代码例子:Private Sub TestErrorHandler()
'* Purpose : Test the On Error GoTo statement by deliberately
'* generating a run-timeerror.
On Error GoTo 4
Debug.Print "Line 2"
Debug.Print 10 / 0
Debug.Print "Line 4"
Debug.Print "Line 5"
End Sub我们可能认为,被0除的错误会导致代码在输出文本line 4这个语句上继续执行,因为这是代码的第四个语句(不是计数注释)。不仅这种情况不会发生,而且该代码实际上会导致产生一个编译错误,并且代码根本不会执行。
3、用调试方式激活错误处理程序和取消其激活状态
虽然我们不希望已编译程序中的错误不被捕获,但是,当程序在IDE中运行时如果出现错误,让VB中止代码的执行,这样做常常是非常不利的。当代码的执行中止时,会看到一条相关的出错消息,并告诉我们出现错误的代码行,这对于代码的调试来说是大有帮助的。VB为处理代码设计时遇到的错误而使用的方法取决于VB IDE的Error Trapping(捕获错误)属性。Error Trapping属性是VB环境的一个属性,不是某个项目的属性。我们操作的每个项目,即使在关闭和重新启动VB之后,均使用该设置值。若要为VB的当前会话设置Error Trapping选项,而不必为将来的会话修改默认值,请使用代码窗口的快捷菜单上的Toggle命令(见图2)。
图2 从任何代码窗口的快捷菜单中选择Toggle命令
可以将Error Trapping属性设置为下列值中的一个:
Break On All Errors(在所有错误上中止)。
Break In Class Module(在类模块中中止)。
Break On Unhandled Errors(在未处理的错误上中止)。
Break On All Errors实际上可使所有错误处理程序均取消激活状态。当出现一个错误时,无论是否激活了处理程序,代码均在出错的语句上进入中止方式,同时VB显示一条出错消息。这使我们能够在IDE进行测试时处理意料不到的错误。 -
VB程序设计前六章整理
2019-02-28 20:43:45不脱离vb集成开发环境,由集成开发环境负责对应用程序的解释执行,并提供调试程序的方法。 编译方式:生成exe文件在windows环境下直接运行的方式。 Commandbutton: 一个窗体上只能有一个按钮的...程序运行的两种方式:解释方式,编译方式
Vb集成开发环境为应用程序开发提供了三种工作模式:设计、运行、中断
解释方式:不生成应用程序的目标程序,边解释边执行。不脱离vb集成开发环境,由集成开发环境负责对应用程序的解释执行,并提供调试程序的方法。
编译方式:生成exe文件在windows环境下直接运行的方式。
Commandbutton: 一个窗体上只能有一个按钮的cancel或default属性为 ture
当visible属性为false时不能响应用户的鼠标与键盘操作。
对象事件:事件是指对象能够识别并做出反应的外部刺激。
工程中的文件与模块
1.工程文件(.vbp)
2.窗体模块文件(.frm)3.类模块文件(.cls)
4.标准模块文件(.bas)
什么是debug对象?
第二章
Vb提供的数据类型:数值型、字符型、布尔型、日期型、可变型、对象型
数值型:整型、长整型、单精度型(7位有效数字)、双精度型(最多15位有效数字)、货币型、字节型(非负数)
日期时间型常量:例如#1998-10-7#
声明变量:指定变量名、变量的数据类型和变量的作用域。
变量的作用域:过程级变量(dim|static)、模块级变量(private|dim)、应用程序级变量(public)
变量的强制显示声明:没有预先声明就直接使用变量的方法称为隐式声明,但很容易发生错误,如把一个变量拼写错误就会产生一个新的变量。为了避免发生一上问题,导致程序错误,可以规定在使用变量前必须声明变量。 Option Explicit
符号常量与变量的最大区别是:声明符号常量时要指定符号常量的值,在符号常量的作用域内,不允许给符号常量赋值,也不允许在程序运行过程中改变符号常量表示的值。例如:PI
过程级符号常量:Const<符号常量名>[As数据类型]=<表达式>
模块级符号常量:[Private]Const<符号常量名>[As 数据类型]=<表达式>
全局符号变量:<Public>Const<符号常量名>[As 数据类型]= <表达式>
字符串运算符是“&”
逻辑运算符又称布尔运算符:And(与) Or(或)Not(非)Eqv(等于)Xor(异或)Imp(蕴含)
数学函数:Abs(X)绝对值函数Sgn(X)符号Exq(X)幂运算函数Log(X)自然对数函数Sqr(X)算数平方根函数Sin(X)、Cos(X)、Tan(X)、Atn(X)三角函数
字符串函数:Len(String)计算字符串长度的函数\Left(String,n)从字符串的左边取n个字符\Right(String,n):从字符串的右边取n个字符\Mid(String,n,m)从字符串的第n个字符开始向右取m个字符。Ltrim(String)
转换函数:Int、Fix都是把x转换成整数的函数/Asc(String)返回字符串String的第一个字符的ASCII码值/Chr该函数是将ASCII码值x转换为相应的字符,即返回值是只有一个字符的字符串。/Lcase(String) 大写转小写Ucase(String)小写转大写/Val(String)把含有数据信息的字符串转换成数据类型,从左到右转换。
日期与时间函数:Date:yy-mm-dd time:hh:mm:ss Now:返回系统当前的日期和时间
随机函数rnd
格式输出函数
第三章
赋值语句:let(可省略)
数据输出:lable、print、信息框函数(msgbox)
数据输入:文本框控件(TextBox)输入数据、输入框函数(InputBox)、焦点(Focus)、Tab键顺序
常用语句:unload 、end
条件语句:单行:if then 块结构:if then else end if 条件语句的嵌套:在条件语句中,如果then后面的语句块1或else后面的语句块2中还有包含另一个条件语句,则称为条件语句的嵌套。IIF函数(<条件表达式>,<条件为真时的值>,<条件为假时的值>)
Select case 语句
后判断条件形式的Do....Loop语句
For...Next 语句 (属于计数型循环,通常用于循环次数已知的程序结构中
For<循环变量>=<初值>to<终值>[Step<步长>]
[<循环体>]
Next[<循环变量>]
(默认步长为1)
多重循环:在循环体内包含另一个循环语句时,就形成了循环嵌套
第四章 内部控件
框架Frame(作为其他控件的容器)
单选按钮OptionButton(同一时刻只能选择同一组中的一个单选按钮)
复选框(CheckBox)(在一组复选框中可以选择多个)
列表框(ListBox)(显示一个项目的列表)
组合框(ComboBox)(同时具有文本框和列表框特性的控件
图片框(PictureBox)可做为其他控件的容器,图像框(Image)只能用于显示图像信息,使用资源少,重绘速度快,可以延伸图片的大小以控制控件的大小。
计时器控件(Timer)
滚动条控件(ScrollBar)常用事件(Scroll)当在滚动条内拖动滑动块时触发该事件。
多重窗体程序设计的常用方法:Load(Load[窗体名称])、Show([窗体名称.]show)、Hide([窗体名称.]hide)、Unload(unload[窗体名称])
第五章 数组(简化程序设计)
数组的声明:
- 建立公共数组
- 建立模块级数组
- 建立局部数组
字符串数组:用来存放字符串的一种变量
可变数组:数组元素只能存放声明时指定类型的数据,但是Variant类型数据是可变数据,数组元素可以存放不同类型的数据。
动态数组:声明数组之后,数组的维数、下标的上下界可以改变的数组。
第六章 过程
Sub过程 (子过程) 必须遵守“先说明,后调用 ”
建立:可以建立在窗体模块中也可以建立在标准模块中
调用:使用call\直接使用过程名
Function过程(函数过程)
声明:与sub过程大致相同,但function有返回值,声明时要指明数据类型。
建立:可以直接输入来建立,也可以用工具菜单中的添加过程
调用:直接使用\使用call语句
参数的传递: 规则:个数相等、数据类型相同、顺序一致。
按值传递参数:在声明过程时,形式参数名前加上关键字”ByVal”表示在调用该过程时,该参数是按值传递的。
按址传递参数:在声明过程时,形式参数名前加上关键字“ByRef”,表示在调用过程时,该参数时按址传递的。是默认传递参数方式。
过程的嵌套与递归:
嵌套:在一个过程中在调用另一个过程。
递归:一个过程调用过程本身,直接的调用自身称为直接递归调用,间接的调用自身称为间接递归调用。
变量和过程的作用域:
代码模块的概念:将一个较大的任务分成若干个较小的部分。
变量:程序运行过程中其值可以发生变化的量
-
在VB.net中为DATAGRID控件增加一个删除按钮的一种方法
2004-07-04 21:59:00有两种不同的方法可以让你在运行时添加这个代码。第一种方法就是运用Page控件的RegisterClientScriptBlock方法, 它可以让你在运行时给一个ASPX页面添加代码。该方法有两个参数——key和script。 参数key是唯一的,... -
python输入圆的半径求面积及周长并保留两位小数_VB程序题:输入半径,计算圆周长和圆面积,如下图所示。...
2020-12-06 00:14:29VB程序题:输入半径,计算圆周长和圆面积,如下图所示。进一步要求,为了保证程序运行的正确,对输入的半径...数据输入结束有两种方法,分别编写事件过程对数据进行检验:1.按Tab键,检查数据的合法性,这时利用Tex... -
用于选举投票的计票程序(设计语言vb)
2009-12-21 08:15:02用来民主投票选举时使用(不过,候选人限于...支持两种计票方法:1.直接输入赞成、反对、弃权;2.只输入反对、赞成,而后有总票数减去反对与弃权,反推出赞成票。 (此处,仅提供.exe文件,vb源文件,联系后再作提供) -
VB中第三方控件(OCX)脱壳的方法
2009-10-28 17:06:00要做到这一点通常有两种办法:一是把控件和程序制成一个压缩包发行,这样的缺点是有可能导致在程序传播过程中丢失控件文件。二是制作安装程序,缺点是制作过程烦琐。而且上面两种办法也不符合绿色软件的要求。所谓的... -
利用activeX实现matlab和vb的混合编程-vb_matlab_activeX.rar
2019-08-12 23:26:46下面是vb程序的界面,只有一个command按钮和image图片框 程序界面.jpg 下面是程序的运行结果: 程序运行结果.jpg 2.代码 Dim Matlab As ... -
VB6.0源码:DLL文件的编译链接插件.rar
2019-07-09 22:30:18启动VB 6.0,随便选择建立一种什么类型的程序,然后主菜单选择"外接程序" 再选择"外接程序管理器",你应该可以看到在列表中有"Create DLLs in VB 6.0,然后选择它,并在窗口右下方的"加载行为"中把"在启动中加载... -
VB6中属性的设置(3)
2020-04-07 07:51:28设置VB对象属性的方法有两种: 1、在控件布局时,通过属性窗口来设置; 2、在程序代码窗口通过编程,运行程序过程中设置属性的值。 一、在属性窗口设置属性 打开属性窗口的方法(四种): 1、选定窗体或窗体中... -
2—1 VB6.0的集成开发环境
2009-12-30 17:48:58在代码编辑窗口的左下角有两个按钮,其作用是设置查看代码的方式。第一个按钮表示按单个过程的方式查看代码,第二个按钮表示在窗口中显示该模块的所有过程。 可以看到一行行的Ⅷ程序代码显示在其中,我们在这里... -
非Access数据库在VB中的编程及应用
2009-05-12 17:26:13三 、数据存取对象变量对外来数据库编程的方法及其实例在VB专业版数据库编程的三种方法中,第二种-使用数据库存取对象变量(DAO)的方法最具有功能强大、灵活的特点。 它能够在程序中存取ODBC 2.0的管理函数;可以... -
VB6.0初学者的10个编程小技巧
2010-06-19 15:15:25一般的处理方法有两种: 1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。 例如: 引用: On Error GoTo ERR_LINE ... Label1.Caption=“正确执行” ERR_LINE: ... Label1.Caption=“出错... -
VB指针葵花宝典之函数指针的配套代码。
2006-03-16 00:00:00而且qsort要嵌套调用(不嵌套在VB里也慢),我们还要尽量节约堆栈,虽然1M的默认堆栈大小可以被扩充(有相邻的空闲空间时),但是我们依然要考虑可能存在的溢出,所以我做的qsort仅两个参数,两个局部Long型变量。... -
计算圆的周长和面积(VB)
2014-12-23 07:32:16数据输入结束有两种方法, 分别编事件过程对数据进行检验: 1:按Tab键,检查数据的合法性,利用TextBox1_LostFocus事件。 2:按回车键,当TextBox1_KeyPress事件中的返回参数e.KeyChar的ASC()值为13时表示输入结束... -
VB6编程实现XP风格
2011-07-05 08:59:57VB6编程实现XP风格 有 Windows XP系统后,网上就开始讨论VB6编程实现XP风格。我在编写《股票管理大师》时,在网上收集... 第一种方法是用manifest文件实现XP风格 用VB6开发的应用程序在Windows XP系统中运行时,只有 -
VB课程设计俄罗斯方块
2011-02-25 10:46:55俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样式,根据小方块的编号变动来实现整个造型的旋转,比如: If n(0) - 18 >= 2 And n(3) + 9 If cmdfang(n(0) - 18).Visible = False ... -
VB6利用webbrower控件自动填写并提交表单.rar
2019-07-10 18:17:02本程序中完成提交的方法提供两种,直接提交表单和点击登录按钮提交,还有第三种方法填表完成后直接用WebBrowser1.Document.Forms("login").Submit,如果您安装的是IE7,在VB开发环境下运行可能会遇到莫名其妙的... -
VB6.0动态加载ActiveX控件漫谈
2012-09-29 17:13:46只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处), 增加了Add方法,该方法就是用于动态加载控件的: Controls.Add(progid as String, Name as String); progid: ActiveX部件的ProgID... -
vb Script参考文档
2009-07-28 22:13:02Source 属性 返回最早出错的对象或应用程序的名称。 Space 函数 返回由指定数量的空格组成的字符串。 Split 函数 返回下限为 0 的、由指定数量的子串组成的一维数组。 Sqr 函数 返回数的平方根。 StrComp 函数 ... -
决策信息系统(有运畴学、工程经济学等内容) VB+SQL
2009-01-08 19:42:26在本程序中,本模块和其他模块之间的没有什么联系,主要是为了完善论文结构,并将一些预测方法在程序中得以体现,能用到的一些预测方法有:一元线性回归、二元线性回归、移动平均法、指数平滑法。 对市场分析中得到... -
VB编程资源大全
2007-10-17 20:47:2322,remontop.ZIP 例子演示移走form中的on top属性(1KB) 23,tform.ZIP 实现t形的form(7KB) 24,trayicon3.ZIP 实现托盘程序的例子(4KB) 25,winhole.ZIP 在中间有一个洞的form例子 ... -
DLL的动态下载运行.mht
2015-07-28 17:18:17下面介绍一种从Domino服务器上动态下载DLL到本地机器运行的方法。 使用操作系统的DLL 如果这些DLL是本地系统自己的API,则直接调用,这里我们举一个例子来说明。 我们要求程序运行时判断本地系统时间,... -
VB原代码门窗表统计
2011-04-11 14:14:362、现在的程序暂提供以上两种情况,如大家有什么新的要求或建议,可以访问我们的网站,http://www.hdwall.net与我们联系,或直接登录网站中的论坛提问,我们会根据大家的要求及时对程序进行更新; 3、如以上说明不够... -
vb.net 教程 6-4 外篇1 提权2
2018-05-19 23:26:28版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及...根据网上的方法,有两种,都是修改app.manifest文件,但是经过我的测试有一种似乎不起作用。 先看第一种不起作用的: 打开项目属性,找到“安全... -
VS2010无法创建新c++程序的解决办法
2017-09-06 21:59:17最近在使用vs2010时,突然发现不能新建c++项目,而且是...于是,首先就去百度解决方法,大致有以下两种方法。 1、打开cmd,以管理员身份运行,输入regsvr32 %windir%\system32\jscript.dll 2、打开Visual Studio 命 -
VB编程资源大全(源码 网络)
2007-10-17 22:54:27邮件服务器必须支持pop3 (30KB) 71,webbrows.ZIP 一个使用ie动态库的详尽文档, 帮助你创建自己的web浏览器 (27KB) 72,see4vb21.ZIP 使用smtp/pop3库实现邮件程序的例子(107KB) 73,wsc4vb23.ZIP ... -
VB常用附加控件【特别整理了表格控件】
2015-09-23 12:07:12这里重点介绍这两种控件,因为在实际开发中,这两种控件应用的场合更多一些,它不仅能够反映数据,而且也能把数据的修改信息反映到数据库中去,所以弥补了上述两种控件的不足。 如果数据不需要修改,那么可以...