我对 PowerBuilder(12.5 Classic)还很陌生,并试图找出我所做的是否是正确的方法。
我在 PowerBuilder DataWindow 中有三个文本控件,名为 t1
、t2
、t3
。
我正在尝试使用表达式,因此t1.Text
属性设置为静态“Hello”
。
t2.text
属性。因此,在表达式字段中,我指定 describe('t1.Text')
。
当我运行它时,它正确地将 t2.Text
显示为 "Hello"
(不包括引号)。
现在对于t3
,我将表达式指定为describe('t2.Text')
,我认为这不是正确的做法,因为我得到的结果为: describe(~"t2.Text~")
[包括所有引号]。
我只是想获取文本框的评估文本(此处为t2
),而不是其表达式。感谢任何帮助。谢谢。
最佳答案
您可以获取 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())
或其他一些函数来评估正确行(或标题 IIRC 的第 0 行)处的属性 - 请注意,如果您不直接将该表达式放入 dw 绘图程序中而是通过 PBScript 设置它,则必须展开双引号
"
或简单的简单报价'
包含 tilda 字符,具体取决于代码中使用的字符串类型
关于powerbuilder - Powerbuilder 12.5 中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28315058/