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 &lt;&gt; &quot;lxm&quot; Then <br>
          lxn.Left = lxn.Left + 1000<br>
          End If<br>
          Next lxn<br>
          End Sub<br>
          Private Sub Form_Load()<br>
          Command1.Tag = &quot;lxm&quot; --tag是个有趣的属性,它可以由程序员指定一个<br>
          End Sub 该对象的&quot;标记&quot;,好区别其他相关对象。 <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(&quot;输入&quot;,&quot;个数&quot;);<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后一条语句出错时,程序将转到标号指定的&quot;错误处理程序段&quot;。通常放在本事件过程的底部。如果只是出错时起语旬转向的作用,则&quot;错误处理程序段&quot;可空。但标号及冒号不能少,如:<br>
          commondialog1.cancelerror=true 列出出错的情形<br>
          on error goto lxn: 出错时转向lxn:<br>
          commondialog1.showsave 如果用户单击了&quot;取消&quot;按纽,就会&quot;出错&quot;。<br>
          ......<br>
          lxn: 为空,只是跳过事件体,直按end sub了。<br>
          end sub<br>
          如果只是出错时将程序转到下一句,只要在出错语句前加上On Error Resume Next.<br>
          真正的错误处理程序要用到一个属性变量:Err.Number,它就是在遇到程序崩溃时对话框中的那个数字,表示是第几号的错误。另外,在事件底部,错误处理程序开始的标号前,一般要加上 Exit Sub语句,以便使程序在无错的情况下不会去执行错误处理段。在错误处理程序结束时,要用&quot;resume&quot;将程序执行顺序返回程序中。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(&quot;软驱门没关好&quot;),,&quot;软驱出错&quot; 提示<br>
          resume 返回程序出错处,如果想只提示一次,那么用resume next执行下一句 else<br>
          msgbox(&quot;无法找到此文件&quot;),,&quot;找不到&quot; 其他错误<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(&quot;c:\&quot;)<br>
          Exit Sub<br>
          lxn:<br>
          If a &lt; 3 Then 如果少于三次就继续提示<br>
          MsgBox (Err.Description), , &quot;error&quot; 用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 &quot;库名&quot; alias &quot;别名&quot; (参数表)或<br>
          Public Declare function 函数名 lib &quot;库名&quot; alias &quot;别名&quot; (参数表) as 返回值类型<br>
          例:Public Declare Function GetWindowsDirectoryA Lib &quot;kernel32&quot; (ByVal lxn As String, ByVal lxm As Long) As Long 真酷!连参数名也自定了。<br>
          说明:<br>
          其中,过程名或函数名可以自定,如果是自定的(不同于DLL库中的名字),那么就必须在 Alias &quot;别名&quot;中写出它在DLL库中的全名;如果过程名或函数名就是DLL库中的过程名,则 Alias &quot;别名&quot;可以省略。如上例若将API函数GetWindowsDirectoryA换成ldd,写成:Public Declare function ldd lib &quot;kernel32&quot; alias &quot;GetWindowsDirectoryA&quot; _<br>
          (byval lxn as string,byval lxm as long) as long<br>
          声明了API函数,它的调用与调用一般的VB函数没区别。<br>
          参数表:声明部分的&quot;形参&quot;有两个值得注意的关健字:ByVal和 ByRef<br>
          byval意为&quot;值传递&quot;,是将实参的值拷贝过来,API过程用的是&quot;实参&quot;的复制品,不会使原参数产生变化。<br>
          byref意为&quot;地址传递&quot;,是将实参在内存中的地址(指针)传递过来,如果在过程中改变了该地址的内容,那么会使原参数的内容产生变化。<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 &quot;kernel32&quot; _ API声明<br>
          (lpBuffer As MEMORYSTATUS)<br>
          Public lxn As MEMORYSTATUS 定义一个这样的变量,好在事件中调用时当实参用。<br>
          调用API函数时,格式如下:<br>
          CALL 函数名或过程名(实参)<br>
          Call GlobalMemoryStatus(lxn)<br>
          如果实参是一个&quot;结构类型&quot;,引用时就用&quot;实参.分量&quot;来表示每一项返回值,如:<br>
          MsgBox (lxn.dwAvailPageFile), , &quot;a&quot;<br>
          MsgBox (lxn.dwAvailPhys), , &quot;b&quot;<br>
          MsgBox (lxn.dwAvailVirtual), , &quot;c&quot;<br>
          MsgBox (lxn.dwLength), , &quot;d&quot;<br>
          MsgBox (lxn.dwTotalPageFile), , &quot; e&quot;<br>
          MsgBox (lxn.dwMemoryLoad), , &quot;f&quot;<br>
          MsgBox (lxn.dwTotalPhys), , &quot;g&quot; 这些a,b,c,d,e……是标题条中随便起的。</p>
        <p align="center">
        <br>
        &lt; <a href="050201.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="050203.htm">下一页</a>     
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?