Возврат пользовательской структуры из всплывающего окна в Powerbuilder 9.0 - PullRequest
1 голос
/ 03 октября 2008

Как вы возвращаете значения или структуры из всплывающего окна в Powerbuilder 9.0? CloseWithReturn действителен только для окон ответа и поэтому недоступен. Когда я устанавливаю значение для Message.PowerObjectParm, значение становится нулевым, когда закрывается всплывающее окно. Мне нужно использовать всплывающее окно, чтобы пользователь мог вернуться к окну вызывающего абонента и прокрутить строки.

Программный поток: 1) Окно A OpenWithParm 2) Окно B теперь открыто 3) Пользователь взаимодействует с обоими окнами 3) Пользователь закрывает окно B 4) Окно B должно передать структуру обратно в окно A

Ответы [ 5 ]

3 голосов
/ 03 октября 2008

Вы можете обойти «один экземпляр» родительского ограничения, передав ссылку на родительское окно при открытии всплывающего окна и сохранив ссылку в переменной экземпляра. Это также гарантирует, что вы говорите с верной версией w_my_parent_window_name.

2 голосов
/ 03 октября 2008

Вы не сможете сделать это так, как вы думаете. Так как окно, которое вы открываете из родительского окна, не является окном отклика, они явно не связаны друг с другом.

Но вы могли бы добиться этого, если бы в родительском окне была публичная переменная экземпляра, которая соответствует типу вашей пользовательской структуры. Затем из дочернего окна перед его закрытием явно установите переменную в родительском окне с помощью чего-то вроде этого:

w_my_parent_window_name.istr_my_structure = lstr_my_structure

Это должно быть сделано только в том случае, если будет создан только один экземпляр w_my_parent_window_name.

0 голосов
/ 08 мая 2009

Всегда есть несколько способов решить проблему. Я предложу другое, хотя вопрос старый ...

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

0 голосов
/ 24 октября 2008

Message.PowerObjectParm будет работать для передачи объекта . Причина, по которой оно становится пустым, когда всплывающее окно закрывается, заключается в том, что структуры автоматически создаются и уничтожаются автоматически. Они действительны только в той области, в которой они объявлены. Например, если он объявлен внутри функции, он будет уничтожен после завершения функции; если это переменная экземпляра всплывающего окна, оно будет уничтожено вместе с всплывающим окном при его закрытии.

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

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

0 голосов
/ 15 октября 2008

Если вы используете PFC, если я правильно помню, был сервис, который вы также могли бы использовать.

...