Appeon PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
24569 20/02/27 18:51:40 RE(3):PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By asano01
24568 20/02/27 17:29:13 RE(2):PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By Wutian
24567 20/02/06 20:12:32 RE:PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By 178504
24566 20/02/06 16:08:48 PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう By 178504

カテゴリ:PowerBuilderの不具合?
日付:2020年02月06日 20:12 発信者:178504
題名:RE:PBAppeonPB2017: DW.Print()を実行後、後続コードの実行前にウィンドウを閉じることができてしまう

自己レスになります。

ウィンドウの種類がresponse!のウィンドウ上でPrint()を行うと、
後続処理が走行する前にウィンドウが操作可能な状態にあり、
他の操作ができることに起因していました。

Print()の後続処理としてCloseWithReturn()がある場合、
Print()後のウィンドウが操作可能なタイミングで×などによって
ウィンドウを意図的に閉じる(とてもシビアなタイミングなので×を連打しまくる)と、
当然のごとくCloseWithReturn()でエラーとなります。

確認していませんが、ウィンドウを意図的に閉じた場合、
ウィンドウが破棄されているため、恐らくオブジェクト操作をする
実装が行われていると必ず死ぬのでは・・・。

そもそもPrint()を実行後に、後続処理がまだ終わっていないのに
ウィンドウを操作できることに問題があると思われます。

これはPBの不具合でしょうか?
また、ウィンドウの種類をmain!にすると上記のような現象は発生しません。
回避策としてはそれしかないでしょうか?



>下記のようなコードがあった時、画面Bでcb_1をクリック後、
>すぐさまウィンドウの×ボタンをクリックしたり、cb_2をクリックすると、
>CloseWithReturn()が走行するより前にウィンドウが閉じてしまい、
>CloseWithReturn()でエラーになってしまいます。

>実装コードとしては非同期処理を実施しているわけでもないのに、
>コード処理の途中でウィンドウメッセージが伝わるのが
>変な気がするのですが、PBの不具合なんでしょうか?

>回避する方法はありますでしょうか?

>この現象はPB12.1でも発生していました。
>Windows7、Windows10のいずれでも発生します。


>【A:呼び元画面】
>OpenWithParm(print_test, dw_1)

>【B:呼び先画面(ウィンドウの種類reponse!)】
>[Instance Variables]
>DataWindow idw

>[open()]
>idw = Message.PowerObjectParm

>[cb_1:clicked()]
>idw.Object.DataWindow.Print.Page.Range = ""
>idw.Object.DataWindow.Print.Copies = "1"
>idw_current.Object.DataWindow.Print.Collate = "Yes"
>idw.Print( true )

>CloseWithReturn( parent, 1 )

>[cb_2:clicked()]
>CloseWithReturn( parent, 0 )

付加情報:

PowerBuilder Version AppeonPB2017

Client SoftWare

OS Windows7
DBMS DBMSクライアントソフトウェアなし
Browser その他

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.