我对PowerBuilder(12.5 Classic)很陌生,并试图找出我正在做的事情是否正确。
我在名为t1
,t2
,t3
的PowerBuilder DataWindow中有三个文本控件。
我正在尝试使用表达式,因此t1.Text
属性设置为静态"Hello"
。
t2.text
属性。所以在表达式字段中我指定describe('t1.Text')
当我运行它时,它会正确显示t2.Text
为"Hello"
(不包括引号)。
现在t3
我将表达式设为describe('t2.Text')
,我认为这不是正确的做法,因为我得到的结果为:describe(~"t2.Text~")
[包括所有引号]。
我只是想获取文本框的评估文本(此处为t2
),而不是其表达式。感谢任何帮助。感谢。
答案 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()
的值evaluate()
的末尾,您将需要使用string(getrow())
或其他一些函数来评估正确行(或第0行)的属性标题IIRC)"
或简单简单引号'
,具体取决于代码中使用的字符串种类答案 1 :(得分:1)
甚至可能是一个更简单的解决方案:
使t3成为具有表达式describe("t2.text")