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

📄 vb程式设计内功讲座.htm

📁 VB设计内功讲座
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<br>
以 上 的 CLng 函 数 就 是 将 数 值 强 制 转 换 成 Long(长 整 数 )型别 的 函 数 , 由 於 CLng(I) 为 一 长 整 数 , 因 此 系 统 进 行  CLng(I)*J 运 算 时 , 会 配 置 与 长 整 数 型 别 等 大 小 的 「 暂 存 记 忆 体 」来 储 存 CLng(I)*J 运 算 的 结 果 , 如 此 一 来 , 就 不 会 产 生 「 溢位 」 的 错 误 了 。 除 了 CLng 函 数 之 外 , 常 用 的 数 值 型 别 资料 转 换 函 数 还 有 :<br>
<br>
<br>
CByte 强制转换成 Byte 型别<br>
CCur 强制转换成 Currency 型别<br>
CDbl 强制转换成 Double 型别<br>
CDec 强制转换成 Decimal 型别<br>
CInt 强制转换成 Integer 型别<br>
CSng 强制转换成 Single 型别<br>
<br>
◆ 值转换之陷阱二<br>
<br>
   Dim X1, X2, X3<br>
<br>
   X1 = &quot;12&quot;<br>
   X2 = &quot;34&quot;<br>
   X3 = 34<br>
   Print X1 + X2 ' 结果等於 &quot;1234&quot;<br>
   Print X1 + X3 ' 结果等於 46<br>
<br>
以 上 的 X1、 X2、 及 X3 都 是 「 不 定 型 」 变 数 , 而 执 行 前 叁个 叙 述 之 後 , 它 们 的 「 资 料 型 别 」 元 素 分 别 等 於 :<br>
<br>
   X1:字串<br>
   X2:字串<br>
   X3:整数<br>
<br>
因 此 接 下 来 的 X1+X2 将 被 视 为 字 串 的 串 接 , 所 以 结 果 等於 &quot;1234&quot;, 但 X1+X3, 由 於 X3 等 於 34, 为 一 整 数 , 所以 X1 的 值 会 由 &quot;12&quot; 转 换 成 12 再 与 34 相 加 , 所 以 得到 46 的 结 果 。<br>
<br>
此 一 陷 阱 虽 然 很 容 易 识 破 , 但 也 很 容 易 疏 忽 , 如 何 防止 这 种 错 误 , 笔 者 倒 有 个 简 单 的 方 法 : 「 资 料 的 『 串 接』 一 律 使 用 '&amp;' 号 , 而 不 使 用 '+' 号 , 『 数 值 』 的 运 算须 先 确 认 被 运 算 的 资 料 是 否 为 数 值 型 别 , 若 不 是 数 值 型别 , 则 利 用 Val 函 数 将 资 料 转 换 成 数 值 」 , 例 如 :<br>
<br>
X1 = &quot;12&quot;<br>
X2 = &quot;34&quot;<br>
X3 = 34<br>
Print X1 &amp; X3 ' 资料串接,结果等於 &quot;1234&quot;<br>
Print Val(X1) + Val(X2) ' 数值相加,结果等於 46<br>
 <br>
<br>
复合式资料<br>
复 合 式 资 料 指 的 是 由 多 笔 或 多 项 基 本 资 料 所 组 成 的 资料 , 典 型 的 代 表 有 「 阵 列 」 及 「 结 构 型 资 料 」 。 如 果 以变 数 的 四 个 组 成 元 素 来 解 析 阵 列 , 则 可 以 表 示 成 图 -6:<br>
<br>
图-6 阵列与变数的四个组成元素<br>
<br>
阵 列 其 实 是 很 简 单 的 资 料 结 构 , 以 上 面 的 X 阵 列 为 例, 我 们 可 以 将 它 视 为 X(1)、 X(2)… 、 X(N) 等 变 数 的 集 合 体 。<br>
<br>
接 着 让 我 们 来 看 结 构 型 的 资 料 , 假 设 有 一 结 构 型 变 数  X 其 结 构 如 下 :<br>
<br>
   Type StructX<br>
       I As Integer<br>
       S As String<br>
       D As Date<br>
   End Type<br>
   Dim X As StructX<br>
<br>
若 表 示 成 「 变 数 的 四 个 组 成 元 素 」 , 则 如 图 -7:<br>
<br>
图-7 结构型变数与变数的四个元素<br>
<br>
在 以 上 的 结 构 型 变 数 中 , 一 共 含 有 4 个 「 名 称 」 元 素  — X、 X.I、 X.S、 及 X.D, 值 得 注 意 的 是 I、 S、 D 为 X 的 资 料 成员 , 因 此 不 能 直 接 使 用 I、 S、 D 的 名 称 来 存 取  I、 S、 D。<br>
 <br>
<br>
物 件<br>
笔 者 过 去 经 常 在 Run!PC 讨 论 物 件 导 向 技 术 , 也 许 您 已 经听 过 资 讯 隐 藏 (information hiding)、 资 料 萃 取 (data abstraction)、继 承 (inheritance)、 多 型 (polymorphism)… 等 技 术 名 词 , 今 天 笔者 想 抛 开 这 些 名 词 , 从 变 数 的 四 个 组 成 元 素 来 看 物 件 。<br>
<br>
首 先 请 看 以 下 叙 述 :<br>
<br>
   Dim X As Integer<br>
   Dim OX As Object<br>
<br>
以 上 的 X 变 数 与 OX 变 数 有 何 区 别 呢 ? 如 果 我 们 利 用  VB 内 建 的 函 数 IsObject 来 检 验 以 上 两 个 变 数 , 结 果 IsObject(X) 传 回 False, 而 IsObject(OX) 则 传 回 True, 这 表 示 OX 为 一 「 物 件」 变 数 , 而 X 只 是 普 通 变 数 。 但 笔 者 必 须 特 别 强 调 一 点, 物 件 变 数 也 是 由 变 数 的 四 个 元 素 所 组 成 的 , 如 图 -8:<br>
<br>
图-8 即使是「物件」变数,也一样含有变数的四个元素<br>
<br>
物 件 变 数 最 特 别 的 地 方 在 於 「 值 」 元 素 , 对 一 般 变 数而 言 , 「 值 」 元 素 会 纪 录 着 该 变 数 的 值 , 但 对 物 件 变 数而 言 , 却 记 录 着 「 具 体 物 件 」 之 位 址 , 如 图 -9:<br>
<br>
图-9 物件变数的「值」元素是用来记录具体物件的位址<br>
<br>
而 特 别 值 得 注 意 的 是 , 当 我 们 利 用 「 Dim OX As Object」 宣告 一 个 物 件 变 数 时 , OX 并 不 包 含 图 -9中 的 「 具 体 物 件 」。<br>
 <br>
<br>
建立具体物件的几个方法<br>
在 VB 程 式 中 有 以 下 几 种 方 法 可 以 让 物 件 变 数 含 有 「 具体 物 件 」 :<br>
<br>
<br>
方法一: Dim OX1 As Object    <br>
Set OX1 = New ClassName<br>
方法二: Dim OX1 As New ClassName<br>
方法叁: Dim OX2 As Object    <br>
Set OX2 = OX1<br>
方法四: Dim OX3 As Object    <br>
Set OX3 = 建立具体物件的函数 <br>
<br>
<br>
<br>
兹 说 明 如 下 :<br>
<br>
◆ 建立具体物件方法一<br>
<br>
方 法 一 的 两 个 叙 述 可 分 解 如 图 -10:<br>
<br>
图-10 建立具体物件〈方法一〉解析图<br>
<br>
在 方 法 一 之 中 , 比 较 值 得 注 意 的 是 New 保 留 字 , 此 一 保留 字 的 作 用 是 建 立 一 个 ClassName 类 型 的 具 体 物 件 , 而  ClassName 必 须 是 已 存 在 之 「 物 件 类 别 」 (class), 举 例 来 说 , Collection 是 VB 所 提 供 的 物 件 类 别 , 而 以 下 叙 述 可 以 建 立 一 个 Collection 类 型 的 物 件 :<br>
<br>
  Dim X As Object<br>
  Set X = New Collection<br>
<br>
◆ 建立具体物件方法二<br>
<br>
方 法 二 其 实 是 把 方 法 一 的 两 个 叙 述 合 而 为 一 , 也 就 是说 :<br>
<br>
   Dim OX2 As Object<br>
   Set OX2 = New ClassName<br>
<br>
完 全 等 於 :<br>
<br>
   Dim OX2 As New ClassName<br>
<br>
既 然 如 此 , 我 们 只 要 使 用 方 法 二 来 建 立 物 件 不 就 好 了, 何 必 了 解 方 法 一 的 叙 述 呢 ? 其 实 方 法 一 与 方 法 二 是 有区 别 的 , 方 法 二「Dim OX2 As New ClassName」 之 中 的 OX2 一 开 始就 被 定 义 成 ClassName 类 别 , 所 以 是 一 个 「 固 定 类 别 」 的 物件 变 数 , 如 果 我 们 设 定 其 他 类 别 的 物 件 给 这 个 物 件 变 数, 则 会 产 生 错 误 , 此 一 道 理 与 「 定 型 变 数 」 完 全 相 同 。至 於 方 法 一 「 Dim OX1 As Object」 
之 中 的 OX1 则 属 於「不 固 定 类别 」 的 物 件 变 数 , 所 以 下 面 的 叙 述 都 是 正 确 的 :<br>
<br>
' 建立 ClassName1 类型的物件给 OX1<br>
Set OX1 = New ClassName1<br>
' 重新建立另一个 ClassName2 类型的物件给 OX1<br>
Set OX1 = New ClassName2<br>
<br>
◆ 建立具体物件方法叁<br>
<br>
<br>
Dim OX2 As Object<br>
Set OX2 = OX1 ' 将 OX1 的具体物件指定给 OX2<br>
<br>
此 一 方 法 的 意 义 是 把 某 一 个 物 件 变 数 的 具 体 物 件 复 制给 另 一 个 物 件 变 数 , 若 以 变 数 的 四 个 元 素 来 表 示 , 则 如图 -11:<br>
<br>
图-11 「Set OX2 = OX1」的内部运作过程<br>
<br>
以 上 的 「 Set OX2 = OX1」 称 为 「 物 件 设 定 叙 述 」 (或 物 件指 定 叙 述 ), 在 语 法 上 , 它 只 比 「 变 数 指 定 叙 述 」 (例 如  X = Y) 多 了 一 个 Set 保 留 字 , 但 是 在 系 统 内 部 的 运 作 上 ,却 复 杂 得 多 。<br>
<br>
◆ 建立具体物件方法四<br>
<br>
在 以 上 建 立 具 体 物 件 的 方 法 中 , 方 法 叁 是 将 一 个 已 存在 具 体 物 件 设 定 给 另 一 个 物 件 变 数 , 而 方 法 一 及 方 法 二则 是 利 用 New 保 留 字 为 物 件 变 数 建 立 具 体 物 件 , 但 有 些 物件 类 别 却 无 法 使 用 New 保 留 字 来 建 立 物 件 , 例 如 VB 所 提 供的 Picture 物 件 类 别 , 此 类 物 件 类 别 通 常 会 搭 配 有 「 建 立具 体 物 件 的 函 数 」 来 代 为 建 立 具 体 物 件 , 例 如 以 下 是 建立 Picture 类 别 物 件 的 方 法 
:<br>
<br>
   Dim pic As Picture<br>
   Set pic = LoadPicture ( &quot;图档名称&quot; )<br>
<br>
以 上 的 LoadPicture 就 是 建 立 Picture 类 别 物 件 的 函 数 。 此一 建 立 具 体 物 件 的 方 法 通 常 与 方 法 一 及 方 法 二 是 互 斥 的, 例 如 Picture 类 别 物 件 的 建 立 , 若 使 用 New 叙 述 就 会 产 生错 误 :<br>
<br>
   Dim pic As New Picture ' 将产生错误<br>
 <br>
<br>
破坏具体物件的方法<br>
   就 所 占 用 的 记 忆 体 而 言 , 物 件 变 数 所 占 用 的 记 忆体 是 固 定 的 , 以 VB 现 况 而 言 , 只 占 用 4 bytes(够 省 吧 !), 但物 件 变 数 所 指 到 的 「 具 体 物 件 」 则 可 能 占 用 大 量 的 记 忆体 , 因 此 若 程 式 随 意 建 立 具 体 物 件 , 使 用 完 毕 时 又 不 将它 破 坏 以 归 还 给 系 统 , 就 可 能 造 成 系 统 记 忆 体 耗 尽 的 现象 。<br>
<br>
至 於 破 坏 具 体 物 件 , 将 记 忆 体 归 还 系 统 的 叙 述 则 十 分简 单 , 如 图 -12:<br>
<br>
   Set 物件变数 = Nothing<br>
<br>
<br>
此 一 叙 述 的 作 用 若 以 变 数 的 四 个 元 素 来 表 达 , 则 如 下:<br>
<br>
图-12「Set OX1 = Nothing」的内部运作过程<br>
<br>
请 参 阅 以 下 副 程 式 , 想 一 想 , 假 如 我 们 没 有 执 行 「 Set 物 件 变 数 = Nothing」 , 将 会 有 怎 样 的 後 果 :<br>
<br>

⌨️ 快捷键说明

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