我 们 在 数 据窗 口 中 需 要 进 行 行 选择 操 作。 如 用 户 为 了 修 改 数 据 或看 到 更 详 细 的 内 容 而 选 择 了 某 一 行; 在 另 一 些 情 况下, 用 户 可 能 要同 时 删 除 或 修 改 多 行, 这 时, 我 们 需求 有 使 用 户 在 一 个 数 据 窗 口 中 同 时 选 择 多 行 的 功 能。这 在PowerBuilder 中 是 相 当 容 易 做 到 的, 但 是, 如 果 您 在 一个 数 据 窗 口 祖 先 中 没 有 标 准 的 函 数 来 处 理 这 些, 而 在每 个窗 口 中 重 复 的 编 程, 这 当 然 就 要 麻 烦 多 了。
我 们 首 先 来看 一 看 进 行 行 选 择 的不 同 方 法。
所 有行 都 不 加 亮
数 据 窗 口 的标 准 行 为 是 不 加 亮 任 何 行。 这 当 然 实 现 起 来 很 简 单了, 您 什 么 也 不 需 要 做。 这 种 做 法 对于 那 些 只 允 许 用户 进 行 滚 动 和 查 看 的 数 据 列 表 或 那 些 单 行 的 数 据 窗口 是 合 适 的。
单 行选 择
单 行 选 择 意味 着 用 户 在 同 一 时 间 只 能 选 择 一 行。 在 用 户 选 择 一 行来 执 行 一 些 动 作, 如 删 除 或 是 在主 从 关 系 的 列 表 中 显示 详 细 信 息, 这 是 非 常 有 用 的。 下 面 是 实 现 允 许 单 行选 择 功 能 所 应 编 写 的 代码:
Event: RowFocusChanged
if GetRow() > 0 then
SelectRow( 0, FALSE )
SelectRow( GetRow(), TRUE )
end if
多 行的 自 动 选 择
多 行 的 自 动选 择 时, 当 用 户 点 击 一 个 未 加 亮 的 行 时, 该 行 将 变亮。 如 果 用 户 点 击 一 个 加 亮 行, 该 即将 不 加 亮。
为 了 实 现 上述 行 为, 您 可 以 将 以 下 的 代 码 放 入RowFocusChanged 事 件 中:
Event:RowFocusChanged
Event: RowFocusChanged
Object: Any DataWindow
if GetRow() > 0 then
if IsSelected( GetRow() ) then
SelectRow( GetRow(), FALSE )
else
SelectRow( GetRow(), TRUE )
end if
end if
或者简化成为下面的一行代码:
if GetRow() > 0 then SelectRow( GetRow(), NOT IsSelected( GetRow()))
按住shift,control或control+shift点击鼠标的使用
windows 的 文 件 管 理 器 或 其 它windows 程 序 中, 您 可以 使 用 按 住shift,control 或control+shift 这 种 键 盘与 鼠 标 的 组 合 来 改 变 选 择 行 为。PowerBuilder 在 数 据 窗 口 中没 有 提 供 这 样 的 能 力, 我 们 必 须 自 己 实 现。
我 们 应 当 实 现 的 组 合 功 能 是:
按 下 键
动 作
无
只 加 亮 当 前 行, 将 其 它 行 的 显示 设 为 正 常
Control
保 持 其 它 行 的 状 态, 并 将 当 前行 也 加 亮
Shift
加 亮 起 始 行 至 当 前 行 之 间 的 所有 行, 将 其 它 行 的 显 示设 为 正 常
Control-Shift
保 持 其 它 行 的 状 态, 并 加 亮 起始 行 至 当 前 行 之 间 的 所有 行,
建 立 这 样 的 功 能, 我 们 首 先 需求 对 起 始 行 进 行 跟 踪。在 用 户 使 用shift 或control-shift 键时, 系 统 应 当 把 当 前 用 户 用 鼠 标 点 击 或 键 盘 选 中 的 行与 在 此之 前 进 行 操 作 的 起 始 行 之 间 的 所