⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pr36.htm

📁 VB一些常见的问题的解决方法36
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>VB问题全功略(36)</title>
<style type="text/css">font         { font-size: 9pt; line-height: 13pt }
p            { font-size: 9pt; line-height: 13pt }
td           { font-size: 9pt; line-height: 13pt }
select       { font-family: 宋体; font-size: 9pt }
input        { font-family: 宋体; font-size: 9pt }
textarea     { font-family: 宋体; font-size: 9pt }
a            { color: blue; font-size: 9pt; text-decoration: none }
a:hover      { color: red; text-decoration: underline }
a:active     { color: red; text-decoration: underline }
BODY {	FONT-SIZE: 12px; SCROLLBAR-HIGHLIGHT-COLOR: #99ccff;  SCROLLBAR-SHADOW-COLOR: #99ccff; COLOR: #000000; SCROLLBAR-3DLIGHT-COLOR:  #99ccff; SCROLLBAR-TRACK-COLOR: #ffffff; FONT-FAMILY: "宋体";  SCROLLBAR-DARKSHADOW-COLOR: #99ccff; SCROLLBAR-BASE-COLOR: #99ccff}
</style>
</head>

<body bgcolor="#FFFFFF">

<div align="center">
<center>
<table border="0" width="100%">
<tr>
<td width="100%">
<p align="center"></td>
</tr>
<tr>
<td align="left" bgcolor="#99CCFF" width="924"><font color="#FF0000">VB问题全功略(36)   
</font><font color="#000080">[<font face="宋体">查找本页请按Ctrl+F]</font></font></td>  
</tr>  
<tr>  
<td width="100%" align="center"></td>  
</tr>  
</center>  
<tr>  
<td>  
<p align="right">[<a href="pr35.htm"><u>上一页</u></a>]<font color="#FF0000"><b>(36)</b></font>[<a href="pr37.htm"><u>下一页</u></a>]</td>  
</tr>  
<center>  
<tr>  
<td><a href="#176">176、模拟 VB 程序执行时产生的错误讯息</a><br>  
<a href="#177">177、如何取得文件大小?</a><br>  
<a href="#178">178、如何一次读取整个文件的内容?</a><br>  
<a href="#179">179、如何使用文本文件来存取 ListBox 内的资料?</a><br>  
<a href="#180">180、字串取代之【全部取代】</a><br>  
<br>  
<font color="#FF0000">176、模拟 VB 程序执行时产生的错误讯息</font><a name="176"></a><br>  
<br>  
VB   
程序执行时若有错误产生,而程序中又没有错误控制的话,便会出现   
VB   
内定的错误编号及错误讯息,但是这个错误讯息通常都很简短,所以使用者和写程序的人反应时,有时候也不知道是什么意思及该如何处理。而且这种错误有时候在开发人员的机器上不会发生,只有在使用者的机器上才会发生,所以开发人员也模拟不出来!<br>  
<br>  
虽然 VB 的错误编号及讯息都很简短,但是在 VB   
的线上说明中都有比较详细的错误分析及解决方法,只是有些人找不到,所以常常有人在问   
VB 产生的错误讯息是什么意思及该如何处理。<br>  
<br>  
VB 的 Err 物件其实就可以让我们模拟错误,以下的 Sample 是从   
VB 的 HELP 中节录出来的:<br>  
<br>  
' If an error occurs, construct an error message<br>  
On Error Resume Next ' Defer error handling.<br>  
Err.Clear<br>  
Err.Raise 6 ' Generate an &quot;Overflow&quot; error.<br>  
' Check for error, then show message.<br>  
If Err.Number &lt;&gt; 0 Then<br>  
Msg = &quot;Error # &quot; &amp; Str(Err.Number) &amp; &quot; was generated by   
&quot; &amp; Err.Source &amp; Chr(13) &amp; Err.Description<br>  
MsgBox Msg, , &quot;Error&quot;, Err.HelpFile, Err.HelpContext<br>  
End If<br>  
<br>  
以上的程序加了 On Error Resume Next,所以并不会中断跳出来,而出现的讯息框内容如下,有错误编号及错误讯息,而且错误讯息很简短,而且它只有一个【确定】按钮,对我们帮助不大:<br>  
<br>  
Error # 6 was generated by Project1<br>  
OverFlow<br>  
<br>  
今天如果在 Design Time 时将 On Error Resume Next   
拿掉,出现的讯息框如下:<br>  
<br>  
Run-time error '6'<br>  
OverFlow<br>  
<br>  
除了以上的讯息外,它有四个按钮,分别是【Continue】、【End】、【Debug】、【Help】,而最后一个按钮【Help】就可以让我们直接进到   
Help 看到以下的详细说明:<br>  
<br>  
Overflow (Error 6)<br>  
<br>  
An overflow results when you try to make an assignment that exceeds the   
limitations of the target of the assignment. This error has the following causes   
and solutions:&nbsp;<br>  
<br>  
The result of an assignment, calculation, or data type conversion is too large   
to be represented within the range of values allowed for that type of variable.<br>  
Assign the value to a variable of a type that can hold a larger range of values.<br>  
An assignment to a property exceeds the maximum value the property can accept.<br>  
Make sure your assignment fits the range for the property to which it is made.<br>  
For additional information, select the item in question and press F1.&nbsp;<br>  
<br>  
所以,下一次您就可以使用这个方法来方便找到详细的错误说明!<br>  
<br>  
<font color="#FF0000">177、如何取得文件大小?</font><a name="177"></a><br>  
<br>  
VB6 提供了一个新的物件模型,叫做 FSO (File System Object)   
物件模型,运用它,我们可以很方便的处理磁盘、资料夹和文件的一些动作。<br>  
<br>  
FSO 物件模型含有好几个物件,其中有一个 File   
物件是用来求得文件的相关资讯,在目前这个主题,我们就可以使用   
File 物件!它有一个属性是 Size,对文件来说就是指文件的大小   
(单位为位元组)。 (注一)<br>  
<br>  
虽然使用 File 物件的 Size   
属性就可以求得文件的大小,但是它有以下二个缺点:<br>  
1、只能用于 VB6 以后的版本。<br>  
2、它不是 VB6 内定的功能,必须另外引用 Scrrun.dll (Microsoft   
Scripting Runtime) 才可以!<br>  
<br>  
以下的二个方法就可以使用在所有的 VB 版本中 (含 VB6),而且是   
VB 内定的功能:<br>  
<br>  
1、FileLen 函数:返回一个 Long,代表一个文件的长度,单位是位元组。<br>  
<br>  
语法:FileLen(pathname) ' pathname 是全路径之文件名称<br>  
适用:取得一个尚未开启的文件的长度大小 (注二)<br>  
<br>  
2、LOF 函数:返回一个 Long ,单位为位元组,用来代表由 Open   
陈述式所开启的文件之大小。<br>  
<br>  
语法:LOF(filenumber) ' filenumber 是一个文件代码<br>  
适用:取得一个已开启的文件的长度大小<br>  
<br>  
注一:File 物件的 Size   
属性除了可以求得一个文件的大小,也可以用来取得整个目录的所有文件大小!<br>  
<br>  
注二:使用 FileLen   
函数时,如果所指定的文件正在开启中,则所返回的值是这个文件在开启前的大小。<br>  
<br>  
<font color="#FF0000">178、如何一次读取整个文件的内容?</font><a name="178"></a><br>  
<br>  
通常我们要读取整个文件的内容时,都是一行一行读进来,再使用变数来累加。除了这种方法之外,您还可以使用   
GET Function,只要呼叫一次就可以读入一整个文件了!而且速度更快!<br>  
<br>  
以下这个模组就是使用 GET   
来读入整个文件,参数只有一个,就是含路径的文件名:<br>  
<br>  
Function FileContent(FileName As String) As String<br>  
Dim FileNo As Integer<br>  
Dim FileString As String<br>  
FileNo = FreeFile<br>  
Open FileName For Binary As #FileNo<br>  
FileString = Space(FileLen(FileName))<br>  
Get #FileNo, , FileString<br>  
Close #FileNo<br>  
<br>  
FileContent = FileString<br>  
End Function<br>  
<br>  
使用实例如下:<br>  
<br>  
Private Sub Command1_Click()<br>  
RichTextBox1 = FileContent(&quot;C:\Test.txt&quot;) (注)<br>  
End Sub<br>  
<br>  
注:<br>  
<br>  
当文件大小小于 64K 时可使用 TextBox<br>  
当文件大小大于 64K 时请使用 RichTextBox<br>  
<br>  
若是 VB6 您还可以使用 FSO 物件模型中的 TextStream 物件的   
ReadAll 方法来读一个完整的 TextStream 文件并返回得到的字串。<br>  
<br>  
对于太大的文件,使用以上的方法浪费记忆体资源。应使用其它的技术去输入一个文件,比如一列一列地读取文件。<br>  
<br>  
<font color="#FF0000">179、如何使用文本文件来存取 ListBox   
内的资料?</font><a name="179"></a><br>  
<br>  
当我第一次在网路上的讨论区中看到有人提到以下的二个问题时:<br>  
<br>  
1、请问如何将 TextBox 或 ListBox 的资料存到文本文件中?<br>  
2、请问如何将文本文件中的资料一行一行读出放到 ListBox   
中?<br>  
<br>  
我真的有一点惊讶,因为我一直都是待在民营企业的 MIS   
部门,所有的系统都要使用到资料库,像这样的问题,我们在系统设计时,都会在资料库中用一个片语文件来存放,不管系统大小,都可以将这一类的资料存在片语文件中,再依类别来区分,还可以依使用者 要来加以编号排序,除此之外,也方便统一管理。<br>
<br>
不过,不管是国内或国外的讨论区中,这样的问题却一直不断的有人在问,而且频率不低,这让我体会到,基于各种理由,并不是所有人都一定要使用资料库来存放这些资料!<br>
<br>
若要使用文本文件来存放这些资料,其实最需要了解的,就是文本文件的存取方法!<br>
<br>
在以下的范例中,我使用到二个 ListBox 及二个 CommandButton,不需更改任何属性!按下   
Command1 时,会将 List1 中的资料放到暂存文件中,按下 Command2   
时,再将暂存文件中的资料放到 List2 中。<br>  
<br>  
Private Sub Command1_Click()<br>  
'将 ListBox 资料放到文本文件中<br>  
Dim i As Integer<br>  
Open &quot;c:\temp.txt&quot; For Output As #1<br>  
For i = 0 To List1.ListCount - 1<br>  
Print #1, List1.List(i)<br>  
Next<br>  
Close #1<br>  
End Sub<br>  
<br>  
Private Sub Command2_Click()<br>  
'将文本文件中资料读出放到 ListBox 中<br>  
Dim wstr As String<br>  
Open &quot;c:\temp.txt&quot; For Input As #1<br>  
Do While Not EOF(1) '执行回圈直到文件尾为止。<br>  
Input #1, wstr<br>  
List2.AddItem wstr<br>  
Loop<br>  
Close #1<br>  
End Sub<br>  
<br>  
不过如果您的系统有使用到资料库,而您之前没有想到要使用资料库的片语文件来存放这些资料的话,我建议您试试看,您会发现片语文件真的很方便,不管什么杂七杂八的资料,只要一个文件就解决了!  
<p><font color="#FF0000">180、字串取代之【全部取代】</font><a name="180"></a></p>  
<p>在一般的应用软体中,例如 Word、小作家、Excel....等,都会提供字串取代【全部取代】的功能,这个功能很简单,就是将整篇文章从头到尾找一遍,碰到您要找的字串,就将它转换成您要取代的字串。<br>  
<br>  
当然,或许您会说 VB6 不是己经有提供这个功能了吗?没错!VB6   
己经有提供这个功能了,但是据我所知,目前企业界实际在使用   
VB6 的比例并不高!大部份还是使用 VB5 / VB4-32,这个模组就是专为   
VB6 以前的版本写的。<br>  
<br>  
以下这个模组 myReplaceString ,它共有三个参数,说明如下:<br>  
1、hString:您要搜寻的一篇文章。<br>  
2、hSource:要搜寻到的子字串。<br>  
3、hTarget:用来取代的子字串。<br>  
<br>  
整个模组的程序码很短,如下:<br>  
<br>  
Public Function myReplaceString(ByVal hString As String, ByVal hSource As   
String, ByVal hTarget As String) As String<br>  
  tLen = Len(hSource)<br>  
  tChk = (Len(hTarget) = Len(hSource))<br>  
  tLoc = 1<br>  
  Do<br> 
    tLoc = InStr(tLoc, hString, hSource)<br>  
    If tLoc &lt;&gt; 0 Then<br>  
      If tChk Then<br>  
        Mid(hString, tLoc, tLen) = hTarget<br>  
      Else<br> 
        hString = Left(hString, tLoc - 1) + hTarget + _<br>  
        Mid(hString, tLoc + tLen)<br>  
      End If<br>  
      tLoc = tLoc + Len(hTarget)<br>  
    Else<br> 
      Exit Do<br>  
    End If<br>  
  Loop<br> 
  myReplaceString = hString<br>  
End Function<br>  
<br>  
而返回值就是已经经过转换后的新文章!</td>  
</tr>  
</table>  
</center>  
</div>  
<div align="center">  
<center>  
<table border="0" width="100%" cellspacing="1">  
<tr>  
<td width="100%" bgcolor="#99CCFF">  
<p align="center"><font color="#ff0000"><a href="../../index.html" target="_blank">[木瓜软件工作室]</a>  
整理</font></td> 
</tr> 
</table> 
</center> 
</div> 
 
</body> 
 
</html> 

⌨️ 快捷键说明

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