在 调 用 自 定 义 的 对 话 框 表 单 时, 我 们 往 往 需 要 获 得 该 表 单 执 行 后 的 选 择 结 果 或 是 某 些 控 件 的 值 等 等。 许 多 人 采 用 的 方 法 是 设 置 一 个 全 程 变 量, 然 后 在 对 话 框 表 单 内 部 修 改 该 标 志 变 量, 进 而 获 得 需 要 的 结 果。 其 实VFP 提 供 了 一 种 更 为 安 全 的 方 法, 使 得 表 单 不 光 能 够 接 收 参 数, 而 且 能 够 返 回 值。 由 于 不 使 用 全 程 变 量, 表 单 的 通 用 性 和 独 立 性 得 以 增 强。 要 使 得 一 个 表 单 能 够 返 回 值, 必 须 满 足 以 下 条 件:
- 1. 该 表 单 的 窗 体 类 型 必 须 是 模 式 窗 体;
- 2. 调 用 该 表 单 的 命 令 为
- DO FORM frmName [WITH参数列表] TO VarName
- 其 中frmName 是 被 调 用 表 单 的 名 称( 若 表 单 有 参 数 应 正 确 指 定 实 参),
- VarName:用来接收表单返回值的变量名.如果该变量原先没有定义,则会被自动创建.
- 3. 被 调 用 表 单 必 须 在unload 方 法 的 代 码 中 使 用 返 回 语 句
- return 表 达 式
并 且 应 保 证 该 语 句 一 定 能 够 被 执 行 到, 以 将 表 达 式 的 值 送 入 指 定 的 变 量 中。return 命 令 后 的 表 达 式 可 以 是 任 意 类 型 的 合 法 表 达 式, 如 果 省 略 了return 语 句 后 的 表 达 式, 则 表 单 将 返 回 值 逻 辑 值.T.。 下 例 简 要 说 明 了 获 取 表 单 返 回 值 的 方 法:
一、 创 建 循 环 调 用 程 序test.prg
- do while .T.
- tempvar = '' &&接收表单返回值的变量
- do form test to tempvar
- *:\\调用表单,返回值送入变量tempvar
- if empty(tempvar)
- &&若直接关闭了表单则
- exit
- else
- wait window '表单返回值是' + tempvar
- endif
- enddo
二、 创 建 示 例 表 单test
1. 添 加 新 属 性uRetuVal;
2. 在unload 方 法 中 添 加 代 码: ----
- retu this.uRetuVal
注 意: 由 于 表 单 的unload 事 件 发 生 在destroy 事 件 之 后, 而 此 时 依 附 于 表 单 的 其 他 控 件 都 已 经 释 放, 只 能 引 用 表 单 的 属 性, 而 不 能 引 用 这 些 控 件 的 任 何 属 性 值, 如command1.caption 等 等。 因 此 一 定 要 先 将 需 要 返 回 的 值 送 入 表 单 的 公 共 属 性uRetuVal 中, 这 样 才 能 够 获 得 表 单 的 返 回 值。
3. 设 置 表 单 属 性windowtype 的 值 为1, 即 表 单 为 模 式 表 单。
4. 添 加 三 个 按 钮command1,command2,command3。 设 置 其 属 性 如 下:
- command1.caption = "OK"
- command1.caption = "CANCEL"
- command1.caption = "HELP"
- 在这三个按钮的click方法里填写相同的代码
- thisform. uRetuVal = this.caption
- rele thisform
三、 保 存 退 出, 执 行test.prg。
可 以 观 察 到, 按 下 不 同 的 按 钮 时, 变 量tempvar 将 返 回 不 同 的 值, 这 证 明 表 单 的 确 可 以 返 回 值 到 调 用 过 程。 利 用 这 种 方 法, 我 们 可 以 从 表 单 中 返 回 任 何 类 型 的 值。
来自:计算机世界日报
转载于:https://blog.51cto.com/lybing/989986