ottenere dati dalla casella di visualizzazione archiviati all'interno di un array associativoHey,
Sto cercando di avere un array che contenga le informazioni come chiave e visualizzi le caselle come valori, ma non riesco a ottenere il loro stato corretto (per la casella di controllo) in seguito: tutte le caselle di controllo restituiscono 0 anche se premute.
Non riesco a capire se ciò è dovuto a un problema di sintassi o qualcosa di più profondo, ecco il mio codice:
MainDisplayBox = V List Box();
DisplayArray = Associative Array();
current data table(dt);
For Each Row(
DisplayArray[char(:Col1)] = list(checkbox(""),hlist box(
text box(char(:Col1)||": suggested value: "),
Text Edit Box(round(:Col2,3)),
));
MainDisplayBox << append(hlistbox(eval((DisplayArray[Col1][1])),eval((DisplayArray[Col1][2]))));
);
OffsetCloseButton = Button Box("close",OffsetWindow<<CLOSE window=""></CLOSE>Grazie,
Ben.
ScriptingRe: ottenere dati dalla casella di visualizzazione archiviata all'interno di un array associativoC'è qualcosa di sbagliato almeno su come si salvano i riferimenti della casella combinata su DisplayArray. Puoi vederlo abbastanza facilmente controllando i valori di DisplayArray. Le caselle di controllo sono viste come:
Check Box("")Quando dovrebbero essere visti come qualcosa del genere:
nw = new window("", cb = checkbox("test")); //<STRONG>cb = DisplayBox[CheckBoxBox]</STRONG>
Quindi stai salvando una nuova casella di controllo con valori vuoti nel tuo DisplayArray, non un DisplayBox che fa riferimento a una casella di controllo.
Penso anche che potrebbe esserci un modo più semplice per creare questa finestra di selezione della casella di controllo rispetto a quello che hai attualmente. Potresti fornire per esempio un'immagine e cosa vuoi che faccia? Ad esempio, stai attualmente eseguendo il loop su ogni riga nella tabella di dati con For Each Row() e quindi utilizzando Associative Array() per salvare le caselle di visualizzazione. L'array associativo avrà solo un valore per chiave, quindi se hai valori duplicati su: Col1 otterrai solo l'ultimo "valore".
Esempio rapido utilizzando la tabella dati Big Class che potrebbe darti alcune idee:
Visualizza di più...Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
keys = Associative Array(dt:name) << get keys;
collection = Associative Array();
vlb = V List Box();
For(i = 1, i <= N Items(keys), i++,
collection[keys[i]] = {};
hlbTemp = H List Box(
collection[keys[i]][1] = Check Box(""),
Text Box(keys[i] || ": suggested value"),
collection[keys[i]][2] = Text Edit Box(dt:height[i])
);
vlb << Append(hlbTemp);
);
//show(collection);
nw = New window("UI", << modal,
v list box(
vlb,
Button Box("OK",
For(i = 1, i <= N Items(keys), i++,
If(collection[keys[i]][1] << get == 1,
Insert Into(pressed, keys[i])
);
);
show(pressed);
)
);
);