Синтаксис Powerbuilder.Как я могу использовать цикл FOR i = 1 TO 3 в этом выражении, заменяя эти числа - PullRequest
1 голос
/ 03 марта 2012

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

1 Ответ

6 голосов
/ 04 марта 2012

Вам нужно будет создать массив объектов CheckBox, которые затем можно будет перебрать. Например,

Объявите переменную экземпляра в вашем окне

CheckBox boxes[]

Добавьте код в событие открытия окна, чтобы собрать объекты, через которые вы хотите перейти:

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

Обратите внимание, вы можете использовать любую логику, которую хотите включить (или нет) для данного элемента управления в списке. Здесь я добавил КАЖДЫЙ флажок, вам может потребоваться провести дополнительное тестирование в условии IF, если вы хотите установить только НЕКОТОРЫЕ флажки.

Перебирайте массив элементов управления, чтобы делать все, что вам нужно. Например, при событии нажатия кнопки следующее перевернет проверенное состояние.

integer i
for i = 1 to UpperBound(boxes)
    boxes[i].Checked = NOT boxes[i].Checked
next

Кстати, IF cbx_1.Checked = TRUE THEN является избыточным ... Свойство Checked является логическим, поэтому достаточно IF cbx_1.Checked THEN.

...