VB5.0 中 文 企 业 版 的 推 出 着 实 让 我 惊 喜 了 一
翻, 尽 管VB5.0 中 文 企 业 版 不 是 同 类 可 视 化 开 发 软
件 中 最 快 速, 但 全 中 文 化 的 帮 助 与 联 机 手 册,
快 捷 编 程 实 时 帮 助 都 让 我 爱 不 释 手, 更 可 爱 的
是VB5.0 企 业 版 也 能 制 作Activex 控 件 了。 毕 竟, 对 于
我 们 这 些 非 专 业 编 程 人 员, 速 度 不 是 唯 一 的 追
求, 方 便 快 捷 的 实 现 自 己 想 法 才 是 我 们 最 终 的
目 的。
---- 在 开 发 一 个 小 型 数 据 库 系 统 中, 我 发 现 录 入
界 面 存 在 一 个 如 下 的 问 题。 绑 定 于 数 据 库 的 文
本 框 不 能 对 日 期、 字 符、 数 字 不 能 进 行 智 能 识
别, 若 在 绑 定 于 日 期 型 字 段 的 文 本 框 录 入 字 符
中, 数 据 库Update 时, 应 用 程 序 发 生 错 误, 尽 管 该
问 题 可 用MaskEeit 控 件 解 决, 但 该 控 件 的 使 用 则 较
为 复 杂, 所 以, 我 们 不 如 用VB5.0 强 大 的Activex 控 件
界 面 向 导, 花 十 分 种 来 制 作 一 个Textpro 的 文 本 框
增 强 控 件。
---- 该 控 制 实 现 如 下 功 能:
---- 1. 具 有 一 个 文 本 框 的 属 性( 包 括 数 据 绑 定)
---- 2. 具 有 一 个 新 的 属 性TextType。 该 属 性 是 一 个 数
值 型,0 代 表 只 接 受 日 期,1 代 表 只 接 受 数 字, 其
它 数 字 接 受 字 符( 缺 省 为2)。 设 计 时, 当TextType 属
性 更 改 后,Text 属 性 改 为0( 数 字 型), ""( 字
符 型), 当 前 日 期( 日 期 型)
---- 运 行 时, 根 据TextType 属 性, 对 错 误 输 入 自 动 提
示 相 应 信 息, 并 去 掉 错 误 输 入, 恢 复 最 近 一 次
的 正 确 输 入。
---- 好 了, 打 开 你 的 电 脑, 让 我 们 用 十 分 种 来 创
造 一 个 奇 迹 !
---- 一、 运 行 可 爱 的VB5.0 之 后, 在 新 建 工 程 中 选 择Activex
控 件, 一 个 已 经 创 建 好 的 用 户 控 件VB5.0 的 集 成 开
发 环 境 中, 我 们 在 属 性 中 将 它 的 名 称 改 为Textpro;
再 双 击 右 边 工 具 栏 的 文 本 框 控 件, 在 窗 体 中 就
会 出 现 一 个 文 本 框, 将 文 本 框 的 名 称 改 为Text1。
---- 二、 使 用Activex 控 件 界 面 向 导:
---- 1. 从 外 接 程 序 中 选 择Activex 控 件 界 面 向 导( 若
没 有, 请 选 择 外 接 程 序 管 理 器(A), 在VB Activex
Control Interface Wizard 前 打 勾 并 确 定, 再 选 择Activex 控 件
界 面 向 导)。
---- 2. 单 击" 下 一 步(N)" 跳 过"Activex 控 件 界
面 向 导 一 介 绍" 窗 体。
---- 3. 在"Activex 控 件 界 面 向 导" 一 选 定 界 面 成
员 窗 体 中, 将 左 面" 可 用 名 称" 的 内 容, 加
到 右 面" 选 定 名 称" 中 去, 在 这 里 我 们 将 一
个 文 本 框 具 有 的 所 有 属 性 与 事 件 从 左 面 加 到 右
面, 单 击" 下 一 步(N)"。
---- 4. 在"Activex 控 件 界 面 向 导 ─ ─ 创 建 自 定 义 界
面 成 员" 窗 体 上, 建 立 自 定 义 属 性TextType, 单 击
确 定, 单 击" 下 一 步(N)"。
---- 5. 在"Activex 控 件 界 面 向 导 ─ ─ 映 射 属 性"
窗 体 中, 将 共 有 属 性 中 的 文 本 框 属 性 映 射 到Text1,
单 击" 下 一 步(N)"。
---- 在"Activex 控 件 界 面 向 导 ─ ─ 设 置 属 性" 窗
体 中, 单 击" 公 有 名 称" 中 的TextType, 将 数 据
类 型 设 置 为Integer, 缺 省 值 设 计 为2, 并 在 说 明 中
添 加 庐 项 属 性 的 说 明"0 接 受 日 期,1 接 受 数
值, 其 它 接 受 文 本, 默 认 为 文 本" 单 击 完 成。
---- 6. 程 序 会 有 一 个 总 结 生 成。 单 击 放 弃, 程 序
回 到VB5.0 的 集 成 开 发 环 境。
---- 7. 为Text 属 性 加 入 数 据 绑 定 特 性, 单 击 菜 单 上"
工 具" 选 择 过 程 属 性, 在 名 称 中 选 择Text, 单 击"
高 级》" 把 数 据 绑 定 中 的 前 三 项 打 上 勾, 单 击"
确 定"。
---- 至 此, 一 个 具 有Text 的 属 性, 并 加 上 了TextType 属
性 的 控 件 在Activx 控 件 界 面 向 导 的 帮 助 下 生 成 了,
双 击 用 户 控 件 窗 体, 在code 框 内, 我 们 可 以 发 现
程 序 已 为 我 们 生 成 了 几 百 行 代 码, 我 们 只 需100
行 左 右 的 代 码 便 可 完 成 这 个 控 件。
---- 三 . 添 加 代 码
---- 首 先, 为 了 实 现 功 能, 我 们 需 要 了 两 个 函
数, 来 判 断 文 本 内 容,VB5.0 的ISIsNumeric() 和IsDate() 能 很
好 的 实 现 功 能, 因 为 是 中 文 版, 其 使 用 方 法 就
不 多 讲 了。 我 们 设 计 了 以 下 常 量 来 作 为 全 局 变
量
Dim fflag As Boolean '定义更改标志
Dim stemps As String '定义临时保存文本字符变量
定义了以下函数来更改text1.text的内容
Private Sub MakeText()
''根据TextType属性更改text的值
'VB5.0用m_来定义自定义属性的值,
m_TextType是设计时textype的属性
If m_TextType = 0 Or m_TextType = 1 Then
If m_TextType = 0 And IsDate(Text1.Text) = False Then
Text1.Text = Date
End If
If m_TextType = 1 And IsNumeric(Text1.Text) = False Then
Text1.Text = "0"
End If
Else
Text1.Text = ""
End If
'更改完毕
End Sub
---- 将 上 述 代 码 加 入 通 用 节
---- 我 们 将 在 text1 的LostFocus 和KeyPress 事 件 中 检 测 文 本
内 容 的 合 法 性, 代 码 如 下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If fflag = False Then
flag = True
End If
If KeyAscii = 13 Then '回车键被按下
If m_TextType = 1 Then
If IsNumeric(Text1.Text) = False Then
tt = MsgBox("该处只接受数字!!", 0, "输入错误")
Text1.Text = stemps
If Text1.Text = "" Then Text1.Text = 0
fflag = False
Else
stemps = Text1.Text
fflag = False
End If
End If
If m_TextType = 0 Then
If IsDate(Text1.Text) = False Then
tt = MsgBox("该处只接受日期!!如:
" + Chr(13) + "(1976-03-19)", 0, "输入错误")
Text1.Text = stemps
If Text1.Text = "" Then Text1.Text = Date
fflag = False
Else
stemps = Text1.Text
fflag = False
End If
End If
End If
RaiseEvent KeyPress(KeyAscii)
End Sub
Private Sub Text1_LostFocus()
If fflag = False Then
fflag = True
End If
If m_TextType = 1 Then
If IsNumeric(Text1.Text) = False Then
tt = MsgBox("该处只接受数字!!", 0, "输入错误")
Text1.Text = stemps
'If Text1.Text = Null Then Text1.Text = 0
If Text1.Text = "" Then Text1.Text = 0
fflag = False
Else
stemps = Text1.Text
fflag = False
End If
End If
If m_TextType = 0 Then
If IsDate(Text1.Text) = False Then
tt = MsgBox("该处只接受日期!!如:
" + Chr(13) + "(1976-03-19)", 0, "输入错误")
Text1.Text = stemps
'If Text1.Text = Null Then Text1.Text = Date
If Text1.Text = "" Then Text1.Text = Date
fflag = False
Else
stemps = Text1.Text
fflag = False
End If
End If
End Sub
---- 自 此, 我 们 的 控 件 已 大 致 完 成, 下 面 再 在 一
些 小 地 方 进 行 一 下 改 进。
---- 首 先 我 们 为 了 实 现 在 设 计 时,Text 属 性 随TextType
变 化 而 变 化, 我 们 在
Public Property Let TextType(ByVal New_TextType As Integer)
m_TextType = New_TextType'' 获 得 改 变 值
MakeText '' 根 据TextType 属 性 更 改text 的 值
PropertyChanged "TextType"
End Property
---- 加 入2 句 代 码( 有 注 解 的 为 我 们 加 入)
---- 为 了 实 现 绑 定 数 据 库 时 的 同 步 修 改, 我 们Text1_Change()
在 加 入 一 句 代 码( 有 注 解 的 为 我 们 加 入)。
Private Sub Text1_Change()
RaiseEvent Change
PropertyChanged "Text"
'绑定数据库时实现同步修改,参见联机手册
End Sub
为了恢复以前的输入,
我们在Text1_GotFocus()事件中记录了正确值
Private Sub Text1_GotFocus()
stemps = Text1.Text
End Sub
为了让Text1充满控件我们在UserControl_Resize()加入代码
Private Sub UserControl_Resize()
MakeText '根据TextType属性更改text的值
Text1.Width = Width '适应大小
Text1.Height = Height
Text1.Top = Top
Text1.Left = UserControl.ScaleLeft
fflag = False
stemps = Text1.Text
End Sub
---- 最 后 别 忘 了 给 控 件 选 一 个 漂 亮 的 图 标, 在 属
性 拦 的ToolboxBar!
---- 四、 测 试 控 件
---- 1 . 选 择 菜 单 中 的" 文 件", 选 择" 文 件"
中 的" 添 加 工 程。。。", 选 择" 添 加 工
程。。。" 的" 标 准EXE", 一 个 新 的 工 程 加 入VB5.0
的 集 成 开 发 环 境, 关 闭 控 件 的 设 计 表 单, 控 件
工 具 栏 就 会 增 加 一 个Textpro 的 控 件
---- 2 . 用 一 般 设 计 程 序 的 方 法 测 试 控 件。
---- 五、 注 意 事 项
---- 1 . 若 再 次 使 用 控 件 向 导, 自 己 加 的 代 码 将
被 注 释 掉( 建 议 不 二 次 使 用 控 件 向 导)。
---- 2 . 第 一 次 使 用 第 三 方 控 件 时, 必 须 在 控 件
工 具 栏 中 用 鼠 标 右 键 激 活 的 部 件 中 注 册 控 件。
---- 3 . 该 控 件 的 开 发 环 境 为VBSP3 版,VB 必 须 用SP3 修
正 过, 方 能 注 册。(《 电 脑 报 配 套 光 盘 四》 有。
标签:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com