Как создать массив пользовательских объектов в Powerbuilder? - PullRequest
1 голос
/ 25 марта 2010

Я пытаюсь преобразовать объект визуального пользователя, который когда-то был встроен в окно, в динамически создаваемый объект визуального пользователя в другом окне (тот же пакет).

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

В тот момент, когда пользователю нужен новый элемент массива:

long ll_count
ll_count = UpperBound(iuo_backorders[])
iuo_backorders[ll_count+1] = uo_backorder    
lb_ok = iuo_backorders[ll_count+1].init('w_backorder_popup', '', '', '', 'd_backorder_popup', sqlca, useTransObj()) 

Это снова и снова использует один и тот же uo_backorder.

Использование: iuo_backorders[ll_count+1] = create uo_backorder возвращает нулевые ссылки на объекты.

Пользовательский объект содержится в другом окне (я думаю), поэтому я не уверен, нужно ли мне перемещать команды uo_ в свой собственный файл в PBL или каким-либо образом изменять ссылки (новое окно является дочерним оригинала, но не знаю, как это относится к вам _)

Все функции уже есть в uo_, мне просто нужно уметь работать

A) как динамически создавать визуальный пользовательский объект

B) как создать массив этих объектов.

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Для создания экземпляра визуального объекта вам необходимо:

windowname.OpenUserObject ( userobjectvar {, x, y } )

или

windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } )

Я ожидаю, что вы сможете использовать iuo_backorders [ll_count + 1] для вашего userobjectvar, но если нет, просто используйте единственную переменную объекта пользователя и назначьте ее элементу массива после его создания.

Удачи,

Терри.

0 голосов
/ 25 марта 2010

PowerBuilder тонко пытается сказать вам, что вы используете неправильный подход. Когда вы создаете визуальные элементы управления во время выполнения через OpenUserObject, вы должны управлять макетом, предоставляющим координаты x, y для каждого элемента управления. Также, если вам нужно более одного элемента управления, вы должны использовать вторую форму OpenUserObject, которую опубликовал Терри. Это хорошо, если вы хотите создать что-то вроде мастера и сложить пользовательские объекты, но в противном случае раскладка объектов в коде вышла с Disco. В PowerBuilder, как только вы захотите отобразить более одного объекта, особенно переменное число чего-либо, вы должны использовать элемент управления DataWindow. В вашем случае вам нужно переместить функциональность, которая есть в uo_backorder, в невизуальный объект и отобразить данные в DataWindow. Если все данные (состояние) находятся в строках DataWindow, вам нужен только один nvo для всех строк.

...