私はレガシーPowerBuilderアプリに取り組んでおり、PowerBuilder 12にアップグレードしましたが、引き続き「クラシック」IDEを使用しています。
フリーフォームデータウィンドウとデータを共有するグリッドデータウィンドウがあります。どちらも、現在の行がグリッド内で変更されたときにフリーフォームが同じ行にスクロールすることを保証する祖先を継承しています。
rowfocuschangedでDataWindow.Modifyを使用する代わりに、フリーフォームの列コントロールのProtectプロパティとBackground.Colorプロパティで式を使用して、有効化/無効化をシミュレートし始めました。
これまでのところ、私はこのアプローチを楽しんでいますが、それははるかにクリーンに見え、どの式でもデータベースにアクセスしていないため、明らかなパフォーマンスの低下はありません。
問題は、ピン留めに苦労しているという理由で、これらの式が原因で前述の行同期機能が失敗することがあることです。
私のテストシナリオでは、グリッドに2つの行があります。行2を選択しても、デバッグによってScrollToRowが実際に正常に呼び出されていることが明らかになったにもかかわらず、フリーフォームが行2にスクロールすることはありません。次に、行1をもう一度選択します。これが機能するかどうかはわかりません。これは、フリーフォームが最初から行1を離れることがないためです。次に、行2をもう一度選択すると、フリーフォームが行2に適切にスクロールします。これ以降、物事はダンディになります。
ある特定の式内でコードを移動することにより、この問題を別のウィンドウで修正しました。これが機能した理由はわかりません。変更は式の結果に影響しませんでした。残念ながら、現在のウィンドウで修正するのは簡単ではありません。これまでのところ、特定のDateTime EditMask列からProtect式を削除するか、前のDateTime EditMask列のTabOrderを正の値に設定することで、機能が失われる問題を解決できます。最初の列にはProtect式が必要であり、2番目の列は編集不可である必要があります。Protect式を1に設定しているときに、2番目の列に正のTabOrderを指定しようとしましたが、機能しませんでした。
私は髪を引き裂いて、PowerBuilderに何か激しいものが嫌いです!問題が何であるか、そしてそれを避けながら列式を利用し続ける方法を誰かが知っていれば幸いです。rowfocuschangedからModifyを使用して、このような操作に戻るのは嫌です。