Come posso eliminare questo messaggio di errore qui?

Appare quando chiudo la tabella e la finestra tramite il pulsante "Chiudi finestra" dopo aver disegnato un grafico. Ho copiato nello script sottostante, ma per eseguirlo bisognerebbe aver aperto una tabella dati adeguata (vedi esempio allegato). Questa, e solo questa tabella, dovrebbe essere aperta durante l'esecuzione dello script. Questo script è un tentativo di avere un piccolo calcolatore di stabilità del desktop (molto sporco, ragionevolmente veloce)/aiutante quando si scrivono rapporti, si valuta la durata di conservazione del prodotto, ecc. Consente all'utente di applicare i nostri dati di stabilità normalizzati (dove t=0 corrisponde a 100% rel.) a ipotetiche concentrazioni iniziali di qualsiasi parametro di qualità (purché numerico) e di passare rapidamente da impostazioni a parametri. Sono arrivato fino ad ora, ma questo messaggio di errore mi sta facendo impazzire. (Inoltre, posso mostrarlo nel prossimo Gruppo di utenti nordici di persona: 05 ottobre 2022 ?)

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;
Nel caso in cui qualcuno abbia un problema simile con un'applicazione generata in Costruttore di applicazioni .
Per le applicazioni, il alla chiusura() il comando può essere inviato tramite
(thisModuleInstance << Get Box) << on close(...)
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-582935" slang="en-US" mode="NONE">Re: Messaggio di errore alla chiusura di un'applicazione fatta in casa tramite il pulsante ("Colonna non risolta alla riga 1")</LINGO-SUB><LINGO-BODY id="lingo-body-582935" slang="en-US" mode="NONE"><P>Solo nel caso in cui ciò sia di qualche interesse, il messaggio di errore è stato causato dall'utilizzo di "On Change" anziché "Set Function" in connessione con la casella di riepilogo della colonna. Lo script (o almeno una versione modificata di quella postata qui) continuava a lanciare messaggi di errore quando non si chiudeva usando il pulsante "Chiudi finestra" ma il pulsante Esci nell'angolo in alto a destra della finestra. Ciò è accaduto dopo che avevo aggiunto alcune righe per assicurarmi che la tabella dei dati fosse chiusa indipendentemente da come si esce dalla finestra. Sospetto che "On Change" sia attivato ... in qualche modo ...</P><P> </P><P>Vecchio</P><PRE><CODE class=" language-jsl">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
)
)
)
)
Nuovo
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
)
)
)
)
Grazie! Come sempre, molto apprezzato, ma continua a lanciare un messaggio di errore.@jthi La soluzione di ha funzionato però.
Un modo rapido e sporco per gestire il problema sarebbe modificare il paragrafo Chiudi finestra per ignorare gli errori
Button Box( "Close Window",
If( !Is Empty( PF ),
Try( PF << Close Window )
);
Try( nw << Close Window );
Try( Close( dt, no save ) );
)
Penso che action_expr venga attivato quando chiudi la finestra e poi tutto sarà incasinato. Non sono esattamente sicuro del perché questo accada, ma la Col List Box non viene distrutta abbastanza velocemente. Come workaroud potresti forse spostare la chiusura della tabella dati su On Close() e rimuoverla dal pulsante "Chiudi finestra".
Aggiungi questo come ultima riga
nw << On close(Close(dt, no save));
e cambia il pulsante in
Button Box("Close Window",
If(!Is Empty(PF),
PF << Close Window
);
nw << Close Window;
)