|
 |
推荐文章 |
|
|
|
|
|
|
|
|
|
|
| 作者:谭翁 日期:2005-8-4 11:23:25 |
|
|
---- Visual Basic 的 列 表 框 控 件 中 包 含 项 目 的 列 表, 本 文 介 绍 如 何 检 查 列 表 中 项 目 是 否 已 经 存 在, 以 及 如 何 将 新 的 项 目 添 加 到 列 表 框 控 件 中。
使 用SendMessage 函 数 搜 寻 重 复 的 项 目
---- 在Visual Basic 中 开 发 应 用 程 序 时, 可 以 使 用 列 表 框 控 件 来 创 建 一 个 项 目 的 列 表。 要 将 新 的 项 目 添 加 到 列 表 中, 可 以 使 用AddItem 方 法, 该 方 法 不 能 自 动 地 报 告 在 列 表 框 控 件 中 是 否 有 重 复 的 信 息 存 在, 所 以 必 须 在 将 新 项 目 添 加 到 列 表 之 前 首 先 检 查 一 下。
---- 可 以 通 过 使 用Windows 应 用 程 序 编 程 接 口(API) 的SendMessage 函 数 来 在 列 表 框 控 件 中 搜 寻 指 定 的 项 目, 它 函 数 允 许 向 操 作 系 统 中 发 送 消 息。 在 本 文 的 例 子 里, 我 们 让SendMessage 函 数 往 列 表 框 控 件 中 执 行 一 个LB_FINDSTRING 消 息。
---- LB_FINDSTRING 消 息 允 许 在 一 个 列 表 框 控 件 中 搜 索 同 目 标 字 符 串 相 匹 配 的 项 目。 该 消 息 的 第 一 个 参 数 是 希 望 进 行 的 搜 索 类 型, 须 将 该 值 设 为0, 表 示 从 列 表 框 控 件 中 的 第 一 个 项 目 开 始 搜 索。 第 二 个 参 数 是 一 个NULL 结 束 的 字 符 串, 它 是 实 际 希 望 搜 索 的 项 目。
---- 如 果 该LB_FINDSTRING 消 息 返 回 值-1, 则 表 明 在 列 表 框 控 件 中 没 有 找 到 目 标 字 符 串, 此 时 可 以 使 用AddItem 方 法 来 将 新 的 项 目 添 加 到 列 表 框 控 件 中。 如 果 该 项 目 已 经 在 列 表 中 存 在, 则 可 以 简 单 地 显 示 一 个 信 息 框 或 是 执 行 一 些 其 它 的 过 程, 来 通 知 用 户 一 个 重 复 的 项 目 已 经 在 列 表 框 控 件 中 存 在。
样 例 程 序
---- 该 程 序 显 示 了 如 何 确 定 在 一 个 列 表 框 控 件 中 是 否 已 经 包 含 了 一 个 要 添 加 到 控 件 中 的 项 目。
---- 1. 在Visual Basic 中 开 始 一 个 新 的 工 程, 采 用 缺 省 的 方 法 建 立Form1。
---- 2. 将 如 下 常 量 和 声 明 语 句 添 加 到Form1 的 通 用 声 明 部 分 中( 注 意 该 声 明 语 句 需 要 被 书 写 在 一 行 内):
---- Private Declare Function SendMessageFind Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long
---- Const WM_USER = &H400
---- Const LB_ERR = (-1)
---- Const LB_FINDSTRING = &H18F
---- 3. 将 如 下 代 码 添 加 到Form1 的Form_Load 事 件 中:
Private Sub Form_Load()
List1.AddItem "Item #1"
List1.AddItem "Item #2"
List1.AddItem "Item #3"
List1.AddItem "Item #4"
End Sub
---- 4. 在Form1 上 添 加 一 个 文 本 框 控 件, 采 用 缺 省 的 方 法 建 立Text1。
---- 5. 在Form1 上 添 加 一 个 列 表 框 控 件, 采 用 缺 省 的 方 法 建 立List1。
---- 6. 在Form1 上 添 加 一 个 命 令 按 钮 控 件, 采 用 缺 省 的 方 法 建 立Command1, 将 起Caption 属 性 设 置 为“ 重 复”。
---- 7. 将 如 下 代 码 添 加 到Command1 的 单 击 事 件 中:
Private Sub Command1_Click()
CheckForDupes
End Sub
---- 8. 创 建 一 个 新 的 名 为CheckForDupes 的 函 数, 将 如 下 代 码 添 加 到 该 函 数 中:
Sub CheckForDupes()
Dim Ret As Long
Dim A As String
A = Text1.TEXT
Ret = SendMessageFind(List1.hwnd, LB_FINDSTRING, 0, (A))
If Ret = LB_ERR Then
List1.AddItem Text1.TEXT
Else
List1.ListIndex = Ret
MsgBox " 重 复 项 目 - 不 能 被 添 加 到 列 表 框 中", 16, " 错 误"
End If
End Sub
---- 按 下F5 键 来 执 行 本 程 序。 在 列 表 框 控 件 中 有5 个 项 目。 在 文 本 框 控 件 中 键 入 一 个 新 的 项 目, 单 击 重 复 命 令 按 钮。 程 序 将 在 列 表 框 控 件 中 搜 索 刚 刚 键 入 到 文 本 框 控 件 中 的 项 目。 如 果 该 项 目 未 被 找 到, 则 程 序 将 把 该 项 目 添 加 到 列 表 框 控 件 中。 相 反, 如 果 该 项 目 已 经 在 列 表 框 中 存 在 了, 则 将 显 示 出 一 个 信 息 框 以 通 知 项 目 已 经 存 在。 |
|
|
|
|
|
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
|
|
|
|
|
责任编辑: 原点 |
投稿作者: 谭翁 |
|
|
信息来源: 网络 |
录入时间: 2005-8-4 11:23:25 |
|
|
|
| |
|