¿Por qué no puedo tener valores duplicados en List Box?Si ejecuto esto:
lb = List Box({"qwerqwerr", "qwerqwerr"});
nwTest = New Window("Test ListBox Duplicate values", lb);Obtendré un cuadro de lista con una sola línea. ¿Por qué?
List Box acepta listas, las listas pueden tener valores duplicados, ¿por qué Lis Box no puede tener valores duplicados?
Si paso una lista con valores duplicados al cuadro de lista, lo que se muestra en el cuadro de lista no es la lista que se pasó ahora con advertencias o errores adicionales.
¿Es por diseño? ¿Por qué? ¿Alguna solución?
Modelado Estadístico AvanzadoDiseño de experimentosRe: ¿Por qué no puedo tener valores duplicados en List Box?Usted nombró dos cuadros de columna de cadena diferentes en dos ventanas diferentes con el mismo nombre. Así que la segunda asignación sobrescribe la primera.
Comportamiento divertido => sin importar los botones en qué ventana presione, la segunda ventana se actualiza.
Re: ¿Por qué no puedo tener valores duplicados en List Box?Ese 'control' es un objeto compuesto que comienza con un cuadro de contorno. Puede investigar la estructura (árbol de visualización) haciendo clic con el botón derecho en el cuadro de contorno y seleccionando Editar > Mostrar estructura de árbol. La lista se presenta en un cuadro de lista, el mismo objeto con el que comenzó.

Re: ¿Por qué no puedo tener valores duplicados en List Box?Usted dijo, " Deberías haber usado diferentes nombres para "scb" - resultó en un comportamiento bastante divertido tal como es ahora. " ¿Cómo es eso?
Re: ¿Por qué no puedo tener valores duplicados en List Box?¡Entendido, gracias!
Deberías haber usado diferentes nombres para "scb" - resultó en un comportamiento bastante divertido tal como es ahora.
De todos modos, qué control se usa aquí:

En mi secuencia de comandos, utilicé una GUI similar para hacer coincidir dos columnas, solo que todo es un poco más complejo, y las segundas columnas pueden tener muchas columnas auxiliares que no quiero que se muestren en la línea "altura = altura". De ahí la posibilidad de valores duplicados.
Por ahora, lo configuré para que se muestre como "altura = altura; sexo, nombre, edad" para que todo sea único, pero idealmente solo querría mostrar las columnas principales.
Re: ¿Por qué no puedo tener valores duplicados en List Box?Acepto que la documentación debe señalar que el cuadro de lista utilizará elementos únicos en la lista proporcionada. El argumento de la lista no necesita tener elementos únicos. Cualquiera que utilice la documentación debe estar preparado; es decir, se espera cualquier comportamiento posible.
Entonces, incluso si sus ejemplos son hipotéticos, la elección de un objeto depende de su propósito. Aquí hay dos enfoques basados en su ejemplo de mostrar una lista de pasos, que pueden no ser únicos en toda la ruta. Un método usa una actualización directa y el otro usa una lista de pasos para la persistencia. (El primer enfoque podría obtener la lista del cuadro de columna de cadena, si es necesario).
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 )
)
)
)
);Re: ¿Por qué no puedo tener valores duplicados en List Box?Entiendo que List Box no es una lista. es eso acepta listas como entrada. En ninguna parte de la documentación dice que la lista solo necesita tener valores únicos. Fue un comportamiento inesperado.
Imagine, por ejemplo, que tiene un cuadro de texto que acepta cadenas como entrada. Entonces mostraría esta cadena en un cuadro, a menos que comience con la letra 'a'.Simplemente no mostraría nada si la cadena comienza con 'a'. Y no está documentado en ninguna parte. Qué fastidio para alguien que intenta solucionar por qué ese cuadro de texto a veces está vacío, ¿verdad?
Re: ¿Por qué no puedo tener valores duplicados en List Box?1. Un cuadro de lista no es una lista. No tiene las expectativas exactas o la interfaz como estructura de datos. Es una comunicación bidireccional e interactiva. Una matriz asociativa resolvería 'el problema'. Muchos usuarios no están familiarizados o no se sienten cómodos con estas estructuras, pero les resulta natural trabajar con una lista. La lista es simplemente un argumento para proporcionar los datos necesarios para que el cuadro de lista realice su función. Convenientemente, los duplicados se descartan automáticamente.
2. Dado que el cuadro de lista es un objeto para presentar una lista de opciones únicas y facilita la interacción con el usuario que necesita seleccionar uno o más elementos, es una opción incorrecta para un componente de interfaz de usuario donde surgen duplicados. Tienes que elegir otro objeto para tu propósito. Su caso de uso debe almacenar una lista ordenada de selecciones realizadas en otras partes de la interfaz de usuario. Un cuadro de columna de cadena podría ser una buena opción para este propósito.
Re: ¿Por qué no puedo tener valores duplicados en List Box?@David_Burnham , @Mark_Bailey y @txnelson
Mi punto es doble:
1. Si acepta listas como entrada, no debe modificarlas y mostrarlas tal cual. Básicamente, no es un buen comportamiento cuando el control no muestra lo que se introdujo en él. Si necesita ser único, no permita listas, conviértalo en matrices asociativas donde las claves son líneas, los valores se ignoran o son otra cosa. O al menos lanzar algún tipo de advertencia o excepción cuando se proporciona una lista con valores duplicados como entrada.
2. ¿Cómo distinguir entre valores idénticos? Bueno, hay orden en la lista, ¿verdad? Puedo pensar en muchos casos de uso en los que el usuario usaría este tipo de control para reflejar pasos en el algoritmo, conjuntos de objetos idénticos que el usuario ensambló, informes para ejecutar, etc.
Por ejemplo, tengo cuatro botones: "Izquierda", "Derecha", "Arriba" y "Abajo". El usuario necesita configurar algún algoritmo para lograr un resultado determinado. Él programa esto presionando botones consecutivamente. Cada pulsación de un botón añade un paso a una lista. Realización de una lista de pasos. Esta lista contiene pasos idénticos. Derecha, derecha, arriba, derecha, abajo, abajo, izquierda. Esta es una lista. ¿Dónde mostraría esa lista, si no fuera en algo que se llama List Box ()?
Re: ¿Por qué no puedo tener valores duplicados en List Box?Como @Mark_Bailey indicado, el cuadro de lista se comporta de esta manera por diseño.
El cuadro de lista está diseñado como un elemento de interfaz de usuario para permitir que un usuario seleccione un valor de una lista, por ejemplo, {"ImpurezaA","ImpurezaB","ImpurezaC","ImpuridadD"}.Si presenta una lista como {"ImpurityA","ImpurityB","ImpurityC","ImpurityD","ImpurityB"}, ¿cómo sabría el usuario si seleccionar la primera o la segunda "ImpurityB"?Lógicamente, al usuario se le debe presentar una lista única de valores y eso es lo que hace el cuadro de lista.
Pero simpatizo con la pregunta porque comúnmente uso un ListBox como un registro de desplazamiento en el que escribo mensajes.Lo que luego causa problemas si quiero escribir una línea en el registro que ya se ha escrito, porque no puedo tener la misma línea dos veces.En este caso de uso, generalmente recurro a mantener un mensaje de cadena con saltos de línea y mostrar la cadena usando un cuadro de texto de varias líneas.
Si el caso de uso es para permitir que un usuario haga una selección, presumiblemente hay información secundaria que distingue entre las dos Impurezas B en el ejemplo anterior, en cuyo caso puede crear una lista de elementos compuestos que se mostrarán en el cuadro de lista:
{"ImpurezaA/Lote1",ImpurezaB/Lote1", ..., "Impureza B/Lote2"}
Re: ¿Por qué no puedo tener valores duplicados en List Box?El cuadro de lista está destinado a presentar elementos para su selección en la interfaz de usuario. Solo señalaste el comportamiento de este objeto. ¿Cómo sabría un usuario qué artículo quiere si tiene el mismo valor? Tal vez otra caja de exhibición sirva para su propósito, que no ha compartido.
Re: ¿Por qué no puedo tener valores duplicados en List Box?No he encontrado documentación que especifique que solo se muestra una lista única de valores en un cuadro de lista, pero en mi prueba, parece que solo se muestra una entrada para cada valor específico en el cuadro de lista asociado con el cuadro de lista () objeto..