Powerbuilder语法.如何在此语句中使用FOR i = 1 TO 3循环替换这些数字

Sid*_*Sid 1 powerbuilder dynamic

CBX代表复选框,我想使用for循环最小化代码,但不知道PB识别语句上的连接的语法

IF cbx_1.Checked = TRUE THEN
    fw_generate(1, cbx_1.Text)  

END IF

IF cbx_2.Checked = TRUE THEN
    fw_generate(2, cbx_2.Text)  

END IF

IF cbx_1.Checked = TRUE THEN
    fw_generate(3, cbx_3.Text)  

END IF
Run Code Online (Sandbox Code Playgroud)

Jim*_*eil 6

您需要构建一个CheckBox对象数组,然后您可以遍历这些对象.例如,

在窗口上声明一个实例变量

CheckBox boxes[]
Run Code Online (Sandbox Code Playgroud)

在窗口打开事件中添加代码以收集要循环的对象:

integer i
for i = 1 to UpperBound(this.control)
    if TypeOf(this.control[i]) = CheckBox! Then
        boxes[UpperBound(boxes) + 1] = this.control[i]
    end if
next
Run Code Online (Sandbox Code Playgroud)

注意,您可以使用列表中包含(或不包含)给定控件的任何逻辑.在这里我添加了每个复选框,如果你只想要一些复选框,你可能需要在IF条件下做更多的测试.

循环控制数组以执行您需要的任何操作.例如,在按钮单击事件中,以下将翻转已检查状态.

integer i
for i = 1 to UpperBound(boxes)
    boxes[i].Checked = NOT boxes[i].Checked
next
Run Code Online (Sandbox Code Playgroud)

顺便说一句,IF cbx_1.Checked = TRUE THEN是多余的...... Checked属性是布尔值,所以IF cbx_1.Checked THEN就足够了.