Powerbuilder 12.5 中的表达式

Expression in Powerbuilder 12.5

我是 PowerBuilder (12.5 Classic) 的新手,正在尝试确定我正在做的事情是否正确。

我在名为 t1t2t3.

的 PowerBuilder 数据窗口中有三个文本控件

我正在尝试使用表达式,因此 t1.Text 属性 设置为静态 "Hello"

t2.text 属性 使用表达式。所以在表达式字段中我指定 describe('t1.Text').
当我 运行 它时,它正确地将 t2.Text 显示为 "Hello"(不包括引号)。

现在,对于 t3,我给出的表达式为 describe('t2.Text'),我认为这不是正确的做法,因为我得到的结果是:describe(~"t2.Text~") [包括所有引号].

我只是想获取文本框的评估文本(这里 t2),而不是它的表达式。感谢任何帮助。谢谢。

您可以通过在 Describe() 中使用 evaluate() 数据窗口表达式来获取 dw_1 数据窗口中给定行的字段 属性 表达式的结果:

string ls_expression = "t2.text"
string ls_text
ls_text = dw_1.Describe("evaluate(~"" + ls_expression + "~", " + string(row) + ")")

编辑: 如果你需要动态重用一个 属性 到 DW 中的另一个表达式,它变得有点棘手

  • 因为您不能直接用 eval() 计算 属性 因为 属性 的形式是 "constant <tabulation> expression"(包括双引号),
  • 然后您需要直接获取值
  • 或者您需要计算表达式的正确部分并注意引号(这里我在开头添加一个,但描述中已经给出了相应的结尾引号)。

A multi-line dw 表达式 将是:

if(pos(describe("some_field.protect"),"~t")<1,  /*if the prop has no tab*/
    describe("some_field.protect"),             /*no expression, get it directly*/
    describe(                               /*else eval the right part*/
        "evaluate(~""
            +mid(describe("some_field.protect"), pos(describe("some_field.protect"),"~t")+1)
            +",1)"          /* 1=for row 1 */
    )
)

一些注意事项:

  • 如你所见,我多次调用了表达式的描述符,所以构造几个计算字段来提前获取会更清楚
    • describe()并且只有一个表达式要查询
    • 制表符pos()的值
    • 我在我的示例中对第 1 行进行了硬编码(在 evaluate() 的末尾,您将需要使用 string(getrow()) 或其他一些函数来评估 属性 在正确的行(或 header IIRC 的第 0 行)
    • 请注意,如果您不将该表达式直接放入 dw painter 中,而是通过 PBScript 进行设置,则必须使用 tilda 字符扩展双引号 " 或简单引号 '取决于代码中使用的字符串类型

也许更简单的解决方案:
使用表达式 describe("t2.text")

使 t3 成为计算字段