Come indicizzare una tabella di caselle di controlloTutto,
Sono di n Tabella delle caselle di controllo. Mi chiedo come posso impostarne alcuni selezionati.
LB_b = Lineup Box(N Col(1));
nR = 10;
nC = 10;
SCB1 = String Col Box( "", {} );
For( i = 1, i <= nR, i++,
SCB1 << Add Element( Char( i ) )
);
TB1 = Table Box( SCB1 );
For( i = 1, i <= nC, i++,
Insert Into( TB1, Check Box( Repeat( {" "}, nR ), <<SET heading=""></SET>Quando guardo la struttura ad albero, mi chiedo perché non riesco ad accedere agli elementi. Ho provato qualcosa di simile al seguente senza fortuna. Inoltre, l'obiettivo non è quello di poter selezionare una colonna di caselle di controllo, ma una singola casella di controllo nella matrice.
</CODE></PRE><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-108906" slang="en-US" mode="NONE">Re: Come indicizzare una tabella di caselle di controllo</LINGO-SUB><LINGO-BODY id="lingo-body-108906" slang="en-US" mode="NONE"><P>Questo codice imposterà le caselle di controllo da una matrice salvata di 1 e 0.</P>
<PRE><CODE class=" language-jsl">// Set some random values in this matrix
saved_cbmat =
[ 1 0 0 1 0 0 0 0 0 0,
0 0 0 0 0 0 0 0 0 0,
0 1 0 0 0 0 0 0 0 0,
0 1 0 0 0 0 1 0 0 0,
0 1 0 1 0 0 1 0 1 0,
0 0 0 0 0 0 0 0 0 1,
0 0 0 0 0 0 0 0 1 1,
0 0 0 0 0 0 0 0 1 0,
0 0 0 0 0 0 0 0 1 0,
0 0 0 0 0 0 0 0 0 0];
n = 10; // # rows
m = 10; // # cols
a = 1::n;
// Create a list of empty text fields as checkbox labels
cb_list = {};
for (i = 1, i <= n, i++,
cb_list[i] = "";
);
cbmat = j(n, m, 0);
// Create the window
nw = new window("Test",
tb = table box(
ncb = number col box("", a),
),
okb = button box("OK",
for (i = 1, i <= m, i++,
for (k = 1, k <= n, k++,
cbmat[k, i] = cb[i] << get(k);
),
);
show(cbmat);
nw << close window;
),
);
// Create an array of checkbox columns
cb = {};
// Add the checkboxes
for (i = 1, i <= m, i++,
cb[i] = checkbox(cb_list);
cb[i] << set heading(char(i));
tb << append(cb[i]);
);
// Preload the checkboxes from the saved matrix
for (i = 1, i <= m, i++,
for (k = 1, k <= n, k++,
on_off = saved_cbmat[k, i];
cb[i] << set(k, on_off);
),
);
TB1["CheckBoxBox(1)"] << select ; <BR />
Re: Come indicizzare una tabella di caselle di controllo@pmroz E @txnelson ,
Grazie per le vostre risposte Tuttavia, se posso, penso che la parte principale della mia domanda, ovvero come impostarli su selezionati (colpa mia, avrei dovuto chiedere "selezionato") non sembra essere stata affrontata. Qualcuno di voi potrebbe guidarmi su come posso selezionare una qualsiasi delle caselle di controllo?
Penso @pmroz fornisce un modo per indicizzare la casella di controllo, ma penso che faccia riferimento a ciascuna colonna, non tanto a ogni singola casella di controllo. Cercherò di illustrare un po' più nel dettaglio ciò che cerco:
Lo snippet che ho pubblicato mi fornisce una matrice di caselle di controllo selezionabili in questo modo:

Ora, se un utente effettua la sua selezione, sono in grado di scaricare la selezione utilizzando quanto segue:
NW = New Window("Test",
VLB0 = V List Box(Align(center),
LB_b
)
);
VLB0 << Append(
H List Box(
BB_TargetMatrix = Button Box( "OK",
ResMat = {};
// loop through each row
For( i = 1, i <= nR, i++,
ResMat[i] = {};
// loop through each column getting values
For( r = 1, r <= nC, r++,
ResMat[i][r] = TB1[CheckBoxBox( r )] << get( i )
);
);
ResMat = Matrix( ResMat );
)// end of button box
)// end of H List Box
);
Tuttavia, vorrei sapere come posso impostare la casella della tabella con alcune caselle di controllo preselezionate. Ho una matrice delle stesse dimensioni della casella della tabella, che vorrei utilizzare per impostare le caselle selezionate.
Re: Come indicizzare una tabella di caselle di controlloEcco un modo per fare ciò di cui hai bisogno:
n = 10; // # rows
m = 10; // # cols
a = 1::n;
// Create a list of empty text fields as checkbox labels
cb_list = {};
for (i = 1, i <= n, i++,
cb_list[i] = "";
);
cbmat = j(n, m, 0);
// Create the window
nw = new window("Test",
tb = table box(
ncb = number col box("", a),
),
okb = button box("OK",
for (i = 1, i <= m, i++,
for (k = 1, k <= n, k++,
cbmat[k, i] = cb[i] << get(k);
),
);
show(cbmat);
nw << close window;
),
);
// Create an array of checkbox columns
cb = {};
// Add the checkboxes
for (i = 1, i <= m, i++,
cb[i] = checkbox(cb_list);
cb[i] << set heading(char(i));
tb << append(cb[i]);
);

cbmat =
[ 1 0 0 0 0 0 0 0 0 0,
1 0 0 0 0 0 0 0 0 0,
1 0 1 0 0 0 0 0 0 0,
0 0 1 0 0 0 0 0 0 0,
0 0 1 0 1 0 0 0 0 0,
0 0 0 0 1 0 1 0 0 0,
0 0 0 0 0 0 1 0 0 0,
0 0 0 0 0 0 1 0 0 0,
0 0 0 0 0 0 0 0 0 0,
0 0 0 0 0 0 0 0 0 0];
Re: Come indicizzare una tabella di caselle di controlloHai 2 problemi di riferimento con
TB1["CheckBoxBox(1)"] << select ;
Il primo è quello
TB1["CheckBoxBox(1)"]
sta cercando una casella di struttura con il titolo "CheckBoxBox()".Cioè, hai messo "CheckBoxBox()" tra virgolette, e quindi non sta cercando un oggetto CheckBoxBox(), sta cercando un oggetto con il titolo "CheckBoxBox(1)".
In secondo luogo,
<< Select
non è un messaggio che CheckBoxBox() ha a disposizione.
TB1[CheckBoxBox(1)] << get selected ;
sarebbe quello che desideri, tranne per il fatto che << get selezionato restituisce i valori di stringa per ciascuna delle caselle di controllo selezionate e poiché tutti i valori di stringa per le caselle di controllo sono impostati su " ", sarà tutto ciò che farai essere restituito. Quindi quello che dovrai fare è scorrere ciascuna casella di controllo e trovare i valori. Qui c'è un semplice esempio
For( c = 1, c <= 10, c++,
For( r = 1, r <= 10, r++,
If( T[CheckBoxBox( c )] << get( r ) == 1,
Show( c, r )
)
)
)