De listbox a textbox/Random

katsura
06 de Febrero del 2009
Hola, mi problema es el siguiente, a ver si alguien me puede ayudar. Tengo dos listbox, cada una con elementos diferentes, pero que quiero que aparezcan y se relacionen después en una caja de texto multiline (aunque sea mediante una simple flecha, eso es lo de menos). La cosa está en que, además, esos datos de la segunda listbox deben relacionarse con los de la primera y aparecer en un orden aleatorio, es decir, no igual que cuando salen en un principio sino "randomizados"...
En fin, espero que alguien me pueda ayudar... gracias por adelantado

Baltasar
06 de Febrero del 2009
Para extraer de un listbox cualquier línea de manera aleatoria, usa esta fórmula:

List1.List(Int(Rnd * (List1.ListCount - 1)))

por lo tanto, cada vez que quieras extraer una línea de cada listbox y ponerla en ese textbox, harás lo siguiente:
text1=text1 & List1.List(Int(Rnd * (List1.ListCount - 1))) & " => " & List2.List(Int(Rnd * (List2.ListCount - 1))) & VBCRLF

la variable VBCRLF es para que te inserte un "enter" después de cada pareja (no olvides poner multiline a true).
En el form load, debes poner la sentencia RANDOMIZE, para que no te repita la secuencia aleatoria.

Saludos

katsura
06 de Febrero del 2009
Hola!
Muchas gracias, lo del random ha funcionado, el problema es que, poniendo lo que tú me dices, en la textbox sólo me copia 1 solo elemento de las listbox, como si se "quedara" con el último que ha leído, el resto no me aparecen. Si sabes como puedo solucionarlo, genial, si no muchas gracias, ya me has ayudado ;) Un saludo

Baltasar
06 de Febrero del 2009
No comprendo el problema, podrías explicarlo un poco más?

Juan
06 de Febrero del 2009
Creo que lo que katsura quiere es emparejar todos los elementos de ambos ListBox. Para eso hace falta
un bucle que además de escribir una pareja la elimine
de la lista. Podría ser algo así:

Dim i1 as Integer, i2 as Integer
Do While (List1.ListCount > 0) And (List2.ListCount > 0)
i1 = Int(Rnd * (List1.ListCount - 1)
i2 = Int(Rnd * (List2.ListCount - 1)
text1.Text = text1.Text & List1.List(i1)& " => " & List2.List(i2) & VBCRLF
List1.RemoveItem i1
List2.RemoveItem i2
Loop

P.D.: No lo he probado así que puede haber algún error

Baltasar
06 de Febrero del 2009
Pues ojalá sea eso.

Gracias Juan.

P.D. Tampoco lo he podido probar, pero lo único que veo que se te ha escapado es la falta de paréntesis al final de las líneas i1= . . .

katsura
06 de Febrero del 2009
Muchas gracias a los dos, creo que ya tengo lo que necesitaba.
Por cierto, sabríais cómo podría hacer para poder imprimir el contenido de una listbox, con un diseño creado por mi con su cabecera, apartados...? Quizá creando algún diseño en otro formulario con una tabla.. o insertándolo en alguna hoja de texto prediseñada.. No sé, es posible? Qué opináis?
Gracias de todas formas, un saludo

katsura
06 de Febrero del 2009
En realidad son dos cuestiones: una, cómo o dónde hacer el diseño y que añada los datos, y otra, la impresión. Supongo que si pudiera hacerse en una hoja de texto directamente, con darle a imprimir solucionado.. jeje
Vaya lio... :S.. lo siento

Juan
06 de Febrero del 2009
Pues no se hace así, diseñar una página para imprimir
no es como diseñar un formulario. Hay que hacerlo
éscribiendo un código fuente que llame a los métodos
y propiedades del objeto Printer.

wilder
06 de Febrero del 2009
UNA AYUDADITA A MI TBM XFAS...
he creado un listbox k kontine notas d las cuales kiero extraer los datos y sakarles el promedio mostrando sto n una caja d texto

marimon
06 de Febrero del 2009
OLA GUILDER
yo tenbio unayudita tmb
zumas toas las notas k kontiene el lisboz y el rezultado lo dibides etre la kantidaz de lineaz k kontene el lisboz
y sto lo mtras n la caja de texto