050202.htm
来自「提供一个VB学习教程,入门级。来源于网上」· HTM 代码 · 共 245 行 · 第 1/2 页
HTM
245 行
End Sub<br>
如果是有目的地选择一部分对象的移动,怎么办呢?可以利用对象的标记tag属性,区别不同对象,下例tag属性值为lxm的对象就不移动,<br>
Private Sub Command1_Click()<br>
For Each lxn In Controls --controls中的每个对象<br>
If lxn.Tag <> "lxm" Then <br>
lxn.Left = lxn.Left + 1000<br>
End If<br>
Next lxn<br>
End Sub<br>
Private Sub Form_Load()<br>
Command1.Tag = "lxm" --tag是个有趣的属性,它可以由程序员指定一个<br>
End Sub 该对象的"标记",好区别其他相关对象。 <br>
集合不仅有controls一种,还有其他如窗体集合,数据库集合等,值得重视。<br>
★ 数组: 固定了元素数量的数组叫定长数组,元素数量可在程序运行中改变的数组叫动态数组。<br>
定长数组的声明:全程(公用)数组(在标准模块中):<br>
public 数组名(第1维长度,第2维长度,……) as 数据类型<br>
局部数组(在某事件中):<br>
static 数组名(第1维长度,第2维长度,……)as 数据类型<br>
例: public lxn(19) as string 下标从0到19共20个元素。<br>
创建动态数组:步骤:1。不指明下标定义数组。如public lxn() as integer,同时在标准模块中定义一个变量。 如: public a as integer<br>
2.在程序某处设置一个变量(或其他可确定值)值,如:a=inputbox("输入","个数");<br>
3。用redim语句确定数组大小。如: redim lxn(a)<br>
也可以不用第3步,直接在数组使用时用a限定其FOR……NEXT……循环上限。<br>
for x=1 to a <br>
lxn(x)=……<br>
next x<br>
在一个事件的中途要退出这个事件,用 Exit Sub 关键字。<br>
★ VB程序中的出错处理:错误处理程序使程序在出错时继续运行,处理出错的步骤是:<br>
1,在程序中可能出错的语句前加上一条语句:<br>
on error goto 标号:<br>
如: on error goto lxn:<br>
此处标号是当on error后一条语句出错时,程序将转到标号指定的"错误处理程序段"。通常放在本事件过程的底部。如果只是出错时起语旬转向的作用,则"错误处理程序段"可空。但标号及冒号不能少,如:<br>
commondialog1.cancelerror=true 列出出错的情形<br>
on error goto lxn: 出错时转向lxn:<br>
commondialog1.showsave 如果用户单击了"取消"按纽,就会"出错"。<br>
......<br>
lxn: 为空,只是跳过事件体,直按end sub了。<br>
end sub<br>
如果只是出错时将程序转到下一句,只要在出错语句前加上On Error Resume Next.<br>
真正的错误处理程序要用到一个属性变量:Err.Number,它就是在遇到程序崩溃时对话框中的那个数字,表示是第几号的错误。另外,在事件底部,错误处理程序开始的标号前,一般要加上 Exit Sub语句,以便使程序在无错的情况下不会去执行错误处理段。在错误处理程序结束时,要用"resume"将程序执行顺序返回程序中。resume后可跟标号,举一个例子如下:<br>
private sub command1_click()<br>
......<br>
on error goto lxn: 出错时转向lxn:<br>
......<br>
exit sub 防止程序正常时也执行后面的出错程序,因此无错时结束事件。<br>
lxn: 出错程序段标号(名称)<br>
if err.number=71 then 如果出现71号错误<br>
msgbox("软驱门没关好"),,"软驱出错" 提示<br>
resume 返回程序出错处,如果想只提示一次,那么用resume next执行下一句 else<br>
msgbox("无法找到此文件"),,"找不到" 其他错误<br>
resume stop: 转向标号为stop:语句 <br>
end if<br>
stop: 为空 <br>
end sub <br>
还有一个属性变量err.description,它显示出错时的文字提示内容。可直按用msgbox输出到用户,注意:单独的resume语句返回出错的原程序语句,如果错误一直存在,那么就一直显示,因此,有必要改为resume next或在程序中采用如下技巧(出错提示三次后就越过错误):<br>
Private Sub Form_Load()<br>
Dim a% 在事件开头声明一个变量a<br>
On Error GoTo lxn:<br>
Image1.Picture = LoadPicture("c:\")<br>
Exit Sub<br>
lxn:<br>
If a < 3 Then 如果少于三次就继续提示<br>
MsgBox (Err.Description), , "error" 用msgbox函数输出对话框<br>
a = a + 1 用于记录次数<br>
Resume 返回出错处<br>
Else <br>
resume next 返回出错下一条语句<br>
End If<br>
End Sub<br>
访问系统DLL库:系统WINDOWS提供了三个DLL库,它们的库名为:USER32;<br>
GDI32;<br>
KERNEL32<br>
要访问DLL,先要给程序添加一个标准模块,在标准模块中声明DLL过程。<br>
Public Declare sub 过程名 lib "库名" alias "别名" (参数表)或<br>
Public Declare function 函数名 lib "库名" alias "别名" (参数表) as 返回值类型<br>
例:Public Declare Function GetWindowsDirectoryA Lib "kernel32" (ByVal lxn As String, ByVal lxm As Long) As Long 真酷!连参数名也自定了。<br>
说明:<br>
其中,过程名或函数名可以自定,如果是自定的(不同于DLL库中的名字),那么就必须在 Alias "别名"中写出它在DLL库中的全名;如果过程名或函数名就是DLL库中的过程名,则 Alias "别名"可以省略。如上例若将API函数GetWindowsDirectoryA换成ldd,写成:Public Declare function ldd lib "kernel32" alias "GetWindowsDirectoryA" _<br>
(byval lxn as string,byval lxm as long) as long<br>
声明了API函数,它的调用与调用一般的VB函数没区别。<br>
参数表:声明部分的"形参"有两个值得注意的关健字:ByVal和 ByRef<br>
byval意为"值传递",是将实参的值拷贝过来,API过程用的是"实参"的复制品,不会使原参数产生变化。<br>
byref意为"地址传递",是将实参在内存中的地址(指针)传递过来,如果在过程中改变了该地址的内容,那么会使原参数的内容产生变化。<br>
重大注意;字符串都是传地址的。如果在形参声明中用Byval,则传递字符串的首字符指针(也就是地址),如果用BYREF,则传递指向字符串首字符指针的指针。<br>
重大注意:在形参声明中不注明byval和byref的情况下,缺省为byref,即指针传递。<br>
在API访问和参数类型声明中,有一个很好的帮助工具,那就是API浏览器(在外接程序管理器中),在其中查找所需API,并查找相应类型声明,然后用剪贴板复制到标准模块的声明中,再自定义一个这种类型的变量,如:<br>
Public Type MEMORYSTATUS 数据类型声明,从API游览器中复制<br>
dwLength As Long<br>
dwMemoryLoad As Long<br>
dwTotalPhys As Long<br>
dwAvailPhys As Long<br>
dwTotalPageFile As Long<br>
dwAvailPageFile As Long<br>
dwTotalVirtual As Long<br>
dwAvailVirtual As Long<br>
End Type<br>
Public Declare Sub GlobalMemoryStatus Lib "kernel32" _ API声明<br>
(lpBuffer As MEMORYSTATUS)<br>
Public lxn As MEMORYSTATUS 定义一个这样的变量,好在事件中调用时当实参用。<br>
调用API函数时,格式如下:<br>
CALL 函数名或过程名(实参)<br>
Call GlobalMemoryStatus(lxn)<br>
如果实参是一个"结构类型",引用时就用"实参.分量"来表示每一项返回值,如:<br>
MsgBox (lxn.dwAvailPageFile), , "a"<br>
MsgBox (lxn.dwAvailPhys), , "b"<br>
MsgBox (lxn.dwAvailVirtual), , "c"<br>
MsgBox (lxn.dwLength), , "d"<br>
MsgBox (lxn.dwTotalPageFile), , " e"<br>
MsgBox (lxn.dwMemoryLoad), , "f"<br>
MsgBox (lxn.dwTotalPhys), , "g" 这些a,b,c,d,e……是标题条中随便起的。</p>
<p align="center">
<br>
< <a href="050201.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="050203.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?