Perché non posso avere valori duplicati nella casella di riepilogo?Se eseguo questo:
lb = List Box({"qwerqwerr", "qwerqwerr"});
nwTest = New Window("Test ListBox Duplicate values", lb);Otterrò una casella di riepilogo con una sola riga. Perché?
List Box accetta elenchi, gli elenchi possono avere valori duplicati, perché Lis Box non può avere valori duplicati?
Se passo un elenco con valori duplicati alla casella di riepilogo, ciò che viene mostrato nella casella di riepilogo non è l'elenco che è stato passato con avvisi o errori aggiuntivi.
È di progettazione? Perché? Qualche soluzione alternativa?
Modellazione statistica avanzataProgettazione di esperimentiRi: Perché non posso avere valori duplicati nella casella di riepilogo?Hai chiamato due diverse String Col Box in due diverse finestre con lo stesso nome. Quindi il secondo compito sovrascrive il primo.
Comportamento divertente => non importa i pulsanti in quale finestra premo, la seconda finestra si aggiorna.
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Quel "controllo" è un oggetto composito che inizia con un contorno. È possibile esaminare la struttura (albero di visualizzazione) facendo clic con il pulsante destro del mouse sulla casella del contorno e selezionando Modifica > Mostra struttura ad albero. L'elenco è presentato in una casella di riepilogo, lo stesso oggetto con cui hai iniziato.

Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Hai detto, " Avresti dovuto usare nomi diversi per "scb" - il risultato è stato un comportamento piuttosto divertente com'è adesso. " Come mai?
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Capito, grazie!
Avresti dovuto usare nomi diversi per "scb" - il risultato è stato un comportamento piuttosto divertente com'è adesso.
Ad ogni modo, quale controllo viene utilizzato qui:

Nel mio script ho usato una GUI simile per abbinare due colonne, solo che il tutto è un po' più complesso, e le seconde colonne possono avere molte colonne ausiliarie che non voglio vengano visualizzate nella riga "height=height". Da qui la possibilità di valori duplicati.
Per ora l'ho impostato per mostrare come "altezza=altezza; sesso, nome, età" per rendere tutto unico, ma idealmente vorrei mostrare solo le colonne principali.
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Sono d'accordo che la documentazione dovrebbe indicare che la casella di riepilogo utilizzerà elementi univoci nell'elenco fornito. Non è necessario che l'argomento elenco contenga elementi univoci. Chiunque utilizzi la documentazione dovrebbe essere preparato; vale a dire, ogni possibile comportamento è previsto.
Quindi, anche se i tuoi esempi sono ipotetici, la scelta di un oggetto dipende dal suo scopo. Ecco due approcci basati sul tuo esempio di visualizzazione di un elenco di passaggi, che potrebbero non essere univoci per l'intero percorso. Un metodo utilizza un aggiornamento diretto e l'altro utilizza un elenco di passaggi per la persistenza. (Il primo approccio potrebbe ottenere l'elenco dalla casella della colonna della stringa, se necessario.)
Names Default to Here( 1 );
// directly update list of steps
New Window( "Move It 1",
H List Box(
Outline Box( "Control",
Line Up Box( N Col( 3 ),
Text Box( "" ),
Button Box( "Up",
scb << Add Element( "Up" )
),
Text Box( "" ),
Button Box( "Left",
scb << Add Element( "Left" )
),
Text Box( "" ),
Button Box( "Right",
scb << Add Element( "Right" )
),
,
Text Box( "" ),
Button Box( "Down",
scb << Add Element( "Down" )
),
Text Box( "" )
)
),
Outline Box( "Path",
Table Box(
scb = String Col Box( "Step", {} )
)
)
)
);
//use list as an intermediary structure
updatePath = Function( { list, text, obj },
Insert Into( list, Eval( text ) );
obj << Set( list );
Return( list );
);
path = List();
New Window( "Move It 2",
H List Box(
Outline Box( "Control",
Line Up Box( N Col( 3 ),
Text Box( "" ),
Button Box( "Up",
path = updatePath( path, "Up", scb );
),
Text Box( "" ),
Button Box( "Left",
path = updatePath( path, "Left", scb );
),
Text Box( "" ),
Button Box( "Right",
path = updatePath( path, "Right", scb );
),
Text Box( "" ),
Button Box( "Down",
path = updatePath( path, "Down", scb );
),
Text Box( "" )
)
),
Outline Box( "Path",
Table Box(
scb = String Col Box( "Step", path )
)
)
)
);Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Capisco che List Box non è un elenco. È quello accetta elenchi come input. Da nessuna parte nella documentazione si dice che l'elenco deve avere solo valori univoci. È stato un comportamento inaspettato.
Immagina, ad esempio, di avere una casella di testo che accetta stringhe come input. Quindi mostrerebbe questa stringa in un riquadro, a meno che non inizi con la lettera 'a'.Semplicemente non mostrerebbe nulla se la stringa inizia con 'a'. E non è documentato da nessuna parte. Che peccato per qualcuno che cerca di risolvere il motivo per cui quella casella di testo a volte è vuota, giusto?
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?1. Una casella di riepilogo non è un elenco. Non ha le aspettative o l'interfaccia esatte come struttura dati. È una comunicazione interattiva e bidirezionale. Un array associativo risolverebbe "il problema". Molti utenti non hanno familiarità o non si sentono a proprio agio con queste strutture, ma trovano un elenco naturale con cui lavorare. L'elenco è semplicemente un argomento per fornire i dati necessari affinché la casella di riepilogo svolga la sua funzione. Convenientemente, i duplicati vengono automaticamente scartati.
2. Dato che la casella di riepilogo è un oggetto per presentare un elenco di scelte univoche e facilita l'interazione con l'utente che deve selezionare uno o più elementi, è la scelta sbagliata per un componente dell'interfaccia utente in cui si verificano duplicati. Devi scegliere un altro oggetto per il tuo scopo. Il tuo caso d'uso deve memorizzare un elenco ordinato di selezioni effettuate altrove nell'interfaccia utente. Una casella di colonna stringa potrebbe essere una buona scelta per questo scopo.
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?@David_Burnham , @Mark_Bailey E @txnelson
Il mio punto è duplice:
1. Se accetta gli elenchi come input, non dovrebbe modificarlo e visualizzarlo così com'è. Fondamentalmente, non è un buon comportamento quando il controllo non mostra cosa gli è stato immesso. Se deve essere univoco, non consentire elenchi, rendilo array associativo in cui le chiavi sono linee, i valori vengono ignorati o sono qualcos'altro. O almeno lanciare una sorta di avviso o eccezione quando l'elenco con valori duplicati viene fornito come input.
2. Come distinguere tra valori identici? Bene, c'è ordine nell'elenco, giusto? Posso trovare molti casi d'uso in cui l'utente utilizzerebbe questo tipo di controllo per riflettere passaggi nell'algoritmo, insiemi di oggetti identici che l'utente ha assemblato, report da eseguire ecc.
Ad esempio, ho quattro pulsanti: "Sinistra", "Destra", "Su" e "Giù". L'utente deve impostare un algoritmo per ottenere un determinato risultato. Lo programma premendo i pulsanti consecutivamente. Ogni pressione di un pulsante aggiunge un passaggio a un elenco. Fare un elenco di passaggi. Questo elenco contiene passaggi identici. Destra, destra, su, destra, giù, giù, sinistra. Questa è una lista. Dove dovrei visualizzare un elenco di questo tipo, se non in qualcosa che si chiama List Box ()?
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?COME @Mark_Bailey indicato, la casella di riepilogo si comporta in questo modo per impostazione predefinita.
La casella di riepilogo è concepita come un elemento dell'interfaccia utente per consentire a un utente di selezionare un valore da un elenco, ad esempio {"ImpurityA","ImpurityB","ImpurityC","ImpurityD"}.Se presenti un elenco come {"ImpurityA","ImpurityB","ImpurityC","ImpurityD","ImpurityB"} come farebbe l'utente a sapere se selezionare il 1° di 2° "ImpurityB".Logicamente all'utente dovrebbe essere presentato un elenco univoco di valori e questo è ciò che fa la casella di riepilogo.
Ma sono in sintonia con la domanda perché uso comunemente un ListBox come registro a scorrimento in cui scrivo messaggi.Il che poi causa problemi se voglio scrivere una riga nel registro che è già stata scritta, perché non posso avere la stessa riga due volte.In questo caso d'uso di solito ricorro al mantenimento di un messaggio di stringa con interruzioni di riga e visualizzo la stringa utilizzando una casella di testo a più righe.
Se il caso d'uso È per consentire a un utente di effettuare una selezione, presumibilmente ci sono informazioni secondarie che distinguono tra le due ImpurityB nell'esempio precedente, nel qual caso è possibile creare un elenco di elementi compositi da visualizzare nella casella di riepilogo:
{"Impurità A/Batch1",ImpurityB/Batch1", ..., "Impurity B/Batch2"}
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?La casella di riepilogo ha lo scopo di presentare gli elementi per la selezione nell'interfaccia utente. Hai solo sottolineato il comportamento di questo oggetto. Come fa un utente a sapere quale articolo desidera se ha lo stesso valore? Forse un'altra casella di visualizzazione servirebbe al tuo scopo, che non hai condiviso.
Ri: Perché non posso avere valori duplicati nella casella di riepilogo?Non ho trovato documentazione che specifichi che in una casella di riepilogo viene visualizzato solo un elenco univoco di valori, ma durante i miei test sembra che venga visualizzata una sola voce per ogni valore specifico nella casella di riepilogo associata alla casella di riepilogo () oggetto..