gpt4 book ai didi

列上的 PowerBuilder 表达式控制奇怪的行为

转载 作者:行者123 更新时间:2023-12-04 04:53:53 25 4
gpt4 key购买 nike

我正在开发旧版 PowerBuilder 应用程序,我们已升级到 PowerBuilder 12,但继续使用“经典”IDE。

我有一个网格 DataWindow 与一个自由格式的 DataWindow 共享数据,两者都继承祖先以确保当当前行在网格中发生变化时,自由格式滚动到同一行。

我已经开始在自由格式的列控件的 Protect 和 Background.Color 属性上使用表达式来模拟启用/禁用,作为在 rowfocuschanged 上使用 DataWindow.Modify 的替代方法。

到目前为止,我很喜欢这种方法,它看起来更简洁,而且没有明显的性能损失,因为我没有在我的任何表达式中访问数据库。

问题是,由于我很难确定的原因,这些表达式有时会导致上述行同步功能失败。

在我的测试场景中,网格中有两行。选择第 2 行不会导致自由格式滚动到第 2 行,尽管调试表明确实正常调用了 ScrollToRow。然后我再次选择第 1 行,无法确定这是否有效,因为自由形式从一开始就从未离开过第 1 行。然后我第二次选择第 2 行,自由形式正确滚动到第 2 行,从此一切都很好。

我已经在一个不同的窗口上通过在一个特定表达式中四处移动代码来解决这个问题,不知道为什么会这样,这些更改不会影响表达式的结果。不幸的是,我没有那么容易地在我当前的窗口上修复它。到目前为止,我可以通过从一个特定的 DateTime EditMask 列中删除 Protect 表达式,或者通过将前一个 DateTime EditMask 列的 TabOrder 设置为正值来解决功能丢失的问题。第一列需要 Protect 表达式,第二列需要不可编辑。我试图给第二列一个正的 TabOrder,同时将它的保护表达式设置为 1,但这没有用。

我非常讨厌 PowerBuilder!如果有人知道问题是什么以及我如何在避免它的同时继续利用列表达式,我将不胜感激。我不愿意回到通过 rowfocuschanged 的​​修改来操纵这些东西。

最佳答案

这是回顾的答案,借鉴并添加了评论中的内容。

当您设置新行时,PowerBuilder 会尝试将该列设置为当前在当前行中具有焦点的同一列。这在基本情况下工作得很好,但是当 Protect 属性有一个表达式时,事情可能会有点难以预测。我不确定在目标行中的列受到保护的情况下是否有记录或预期的行为,但我的安全立场是行为是不可预测的,你可能不应该这样做。正如 Mike 所证明的那样,显式设置该列可以解决他的问题。

如果您尝试解决类似问题,要检查的另一件主要事情是确保 RowFocusChanging 没有返回 1 以防止发生行更改。

祝你好运

特里。

关于列上的 PowerBuilder 表达式控制奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com