在Powerbuilder 12.5中表达

时间:2015-02-04 06:44:16

标签: powerbuilder

我对PowerBuilder(12.5 Classic)很陌生,并试图找出我正在做的事情是否正确。

我在名为t1t2t3的PowerBuilder DataWindow中有三个文本控件。

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

使用表达式的

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

  • 因为您无法直接使用eval()评估属性,因为该属性的格式为"constant <tabulation> expression"(包括双引号),
  • 然后你需要直接获得价值
  • 或者您需要使用引号来评估表达式的正确部分(这里我在开头添加一个,但描述已经给出了相应的结尾引用)。

多行 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())或其他一些函数来评估正确行(或第0行)的属性标题IIRC)
    • 请注意,如果你没有直接在dw画家中放置该表达式,而是通过PBScript设置它,则必须使用tilda字符扩展双引号"或简单简单引号',具体取决于代码中使用的字符串种类

答案 1 :(得分:1)

甚至可能是一个更简单的解决方案:
使t3成为具有表达式describe("t2.text")

的计算字段