このエラー メッセージが表示されないようにするにはどうすればよいですか?

最初にグラフを描画した後、[ウィンドウを閉じる] ボタンを使用してテーブルとウィンドウを閉じると表示されます。 以下のスクリプトをコピーしましたが、実行するには適切なデータ テーブルを開く必要があります (添付の例を参照)。 スクリプトの実行時には、これとこのテーブルのみが開いている必要があります。 このスクリプトは、レポートを書いたり、製品の有効期間を評価したりするときに、小さなデスクトップ安定性計算機 (非常に汚い、かなり速い) / ヘルパーを持たせようとする試みです. これにより、正規化された安定性データ (t=0 は 1000%rel に対応) を任意の品質パラメーター (数値である限り) の仮想開始濃度に適用し、設定とパラメーターをすばやく切り替えることができます。 ここまではできましたが、このエラー メッセージに頭がおかしくなりました。 (また、これは次の機会に見せてもいいですか対面北欧ユーザーグループ: 2022 年 10 月 5 日?)

Delete Symbols();
Names Default To Here( 1 );
dt = Current Data Table();
dt << Clear Row States;
dt << Clear Select; // avoids accidentally including columns in colList
// alpha level for bivariate plot
alpha = 0.1;
// get lists for model selection
Batch = Associative Array( dt:Batch ) << Get Keys; // direct column reference
For( i = 1, i <= N Row( dt ), i++, // find all rel% columns
For( j = 1, j <= N Col( dt ), j++,
If( Column( j )[i] == 0,
For( k = 1, k <= N Col( dt ), k++,
If( Column( k )[i] == 100,
Column( k ) << Set Selected( 1 )
)
)
)
)
);
colList = dt << Get Selected Columns;
// length of column list box
nItems = N Items( colList );
// radio box argument
rb1_expr = Expr(
dt << Clear Row States;
one_rb = rb1 << Get Selected;
dt << Select Where( (dt:Batch == one_rb) ); // direct column reference
dt << Invert Row Selection;
dt << Hide and Exclude;
dt << Invert Row Selection );
// "draw graph" button & column list selection arguments
action_expr = Expr(
vlb << Delete; // delete existing vlb
yColAbs = Eval(
Eval Expr(
dt << New Column( one_rb || " / " || " / " || "start level = " || Char( startLevel ) || " for " || Char( yColRel ),
formula( Expr(startLevel) / Expr(100) * (As Column( Expr( yColRel ) ) ) )
)
)
);
pb << Append( // append new vlb with fresh graph
vlb = V List Box(
biv = Bivariate(
Y( yColAbs ), // is this the culprit?
X( dt:Time ), // direct column reference
Fit Line(
{Confid Curves Fit( 1 ),
Confid Curves Indiv( 1 ),
Confid Shaded Fit( 1 ),
Confid Shaded Indiv( 1 ),
Line Color( {230, 159, 0} )},
{Set α Level( 0.1 )}
),
Automatic Recalc( 1 ),
SendToReport(
// note reference to one_rb below in use for changing y axis label
Dispatch( {}, one_rb, TextEditBox, {Set Text( "QC parameter value" )} ),
Dispatch( {}, "timepoint 1", TextEditBox, {Set Text( "Time [months]" )} ),
Dispatch( {}, "Linear Fit", OutlineBox, {Close( 1 )} )
),
)
)
)
);
// model selection window with radio buttons & colum list box
nw = New Window( "Model selection",
Show Menu( 0 ),
Show Toolbars( 1 ), // to have access to cross hair
Border Box( Top( 0 ), Bottom( 20 ), Left( 20 ), Right( 10 ),
H List Box(
Panel Box( "Batch",
rb1 = Radio Box(
Eval List( Batch ),
rb1_expr
),
),
Panel Box( "QC parameter (y-axis)",
stabDat = Col List Box(
Max Selected( 1 ),
Width( 250 ),
N Lines( nItems ),
On Change(
yColRel = Column( dt, (stabDat << Get Selected) );
If( Is Empty( startLevel ),
//then
Empty(),
//else
action_expr
)
)
)
),
stabDat << Append( colList );
Panel Box( "Action",
V List Box(
H List Box (
neb = Number Edit Box( Empty(), 7, << Set Function(
startLevel = neb << Get;
If( Is Empty( yColRel ),
//then
Empty(),
//else
action_expr
) ) ),
Spacer Box( Size( 5, 0 ) ),
Text Box( "Enter start level" )
),
Spacer Box( Size( 0, 10 ) ),
Button Box( "Draw graph",
If( ( Is Empty( startLevel ) + Is Empty( yColRel )) > 0,
// then
New Window( "Message", modal,
V List Box(
Text Box( "QC parameter selection and/or start level missing!" ),
Spacer Box( size( 0, 10 ) )
)
),
// else
action_expr
)
),
Spacer Box( Size( 0, 10 ) ),
Button Box ( "Close Window",
If( !Is Empty( PF ), PF << Close Window);
nw << Close Window;
Close(dt, no save)
)
)
),
pb = Panel Box( "Model",
vlb = V List Box () // space for model graph
)
)
)
);
// making the initially selected buttons active in row selection
one_rb = rb1 << Get Selected;
dt << Select Where( (dt:Batch == one_rb) );
dt << Invert Row Selection;
dt << Hide and Exclude;
ウィンドウを閉じると action_expr がトリガーされ、すべてが台無しになると思います。 なぜこれが起こるのか正確にはわかりませんが、Col List Box が十分に速く破壊されていません. 回避策として、データ テーブルのクローズを On Close() に移動し、[ウィンドウを閉じる] ボタンから削除することができます。
これを最後の行として追加します
nw << On close(Close(dt, no save));
ボタンを
Button Box("Close Window",
If(!Is Empty(PF),
PF << Close Window
);
nw << Close Window;
)この問題を処理する手っ取り早い方法は、[ウィンドウを閉じる] パラグラフを変更してエラーを無視することです。
Button Box( "Close Window",
If( !Is Empty( PF ),
Try( PF << Close Window )
);
Try( nw << Close Window );
Try( Close( dt, no save ) );
)
ありがとうございました! いつものように、非常に感謝していますが、それでもエラーメッセージが表示されます.@jthiの解決策はうまくいきました。
これが興味深い場合に備えて、エラー メッセージは、列リスト ボックスに関連して "Set Function" ではなく "On Change" を使用したために発生しました。 スクリプト (または少なくともここに投稿されたものの修正版) は、[ウィンドウを閉じる] ボタンではなく、ウィンドウの右上隅にある [終了] ボタンを使用して終了すると、エラー メッセージをスローし続けました。 これは、ウィンドウの終了方法に関係なく、データ テーブルが確実に閉じられるように数行追加した後に発生しました。 「On Change」がトリガーされているのではないかと思います...どういうわけか...
年
Panel Box( "QC parameter (y-axis)",
stabDat = Col List Box(
Max Selected( 1 ),
Width( 250 ),
N Lines( nItems ),
On Change( // not working so well for this application
yColRel = Column( dt, (stabDat << Get Selected) );
If( Is Empty( startLevel ),
//then
Empty(),
//else
action_expr
)
)
)
)新しい
Panel Box( "QC parameter (y-axis)",
stabDat = Col List Box(
Max Selected( 1 ),
Width( 250 ),
N Lines( nItems ),
<< Set Function( // no more error messages
yColRel = Column( dt, (stabDat << Get Selected) );
If( Is Empty( startLevel ),
//then
Empty(),
//else
action_expr
)
)
)
)
で生成されたアプリケーションで誰かが同様の問題を抱えている場合アプリケーションビルダー.
アプリケーションについては、クローズ時()コマンドは次の方法で送信できます
(thisModuleInstance << Get Box) << on close(...)