Powerbuilder 12.5 中的表达式
Expression in Powerbuilder 12.5
我是 PowerBuilder (12.5 Classic) 的新手,正在尝试确定我正在做的事情是否正确。
我在名为 t1
、t2
、t3
.
的 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 成为计算字段
我是 PowerBuilder (12.5 Classic) 的新手,正在尝试确定我正在做的事情是否正确。
我在名为 t1
、t2
、t3
.
我正在尝试使用表达式,因此 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")