【问题标题】:Expression in Powerbuilder 12.5Powerbuilder 12.5 中的表达式
【发布时间】:2015-02-04 06:44:15
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: powerbuilder


    【解决方案1】:

    您可以使用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"(包括双引号),
    • 然后您需要直接获取值
    • 或者您需要通过注意引号来评估表达式的正确部分(这里我在开头添加了一个,但相应的结尾引号已经由描述给出)。

    多行 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()) 或其他函数来评估正确行的属性(或标题 IIRC 的第 0 行)
      • 请注意,如果您不将该表达式直接放在 dw 绘制器中而是通过 PBScript 设置它,则必须根据字符串的类型使用 tilda 字符扩展双引号 " 或简单的单引号 '在代码中使用

    【讨论】:

    • 谢谢 .. 是否可以在表达式窗口中提供类似的内容?我尝试了不同的组合..一切都导致无效值,即>>!
    • 你的意思是你想直接得到另一个字段中的计算表达式?
    • 是的,这是正确的,我想通过表达式窗口而不是通过脚本来完成。就像 t2.text 设置为表达式 describe("t1.Text") ..我想在文本字段的 t2 表达式中有类似的表达式。
    • @HelloWorld:我已经扩展了我的答案,向您展示了一些 dw 黑魔法;o)
    • 谢谢@Seki ..我试过了..它让我得到了我想要的..我仍然需要理解它:)。感谢您解释这些东西。
    【解决方案2】:

    也许更简单的解决方案:
    使用表达式 describe("t2.text") 将 t3 设为计算域

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多