ListBox

Lari
11 de Julio del 2003
Hola a todos y gracias a los que contesten. Tengo un listbox que toma los datos de una tabla, y hasta ahí todo bárbaro. El tema es que el listbox debe permitir la selección multiple, y aquellos items seleccionados se deben borrar del listbox una vez que presione un determinado botón. El problema es que se me borra el listbox completo más allá de que seleccione solo dos o tres. ¿qué puede estar faltando en el código?

osvaldo
11 de Julio del 2003
Bueno para empezar hay ciartas cosas que debes tomar en cuenta: como por ejemplo tengo entendido que si en la propiedad RowSourceType del listbox no es igual a 0, osea que RowSource es un valor, una tabla, una instrucción SQL, una consulta, una matriz, una lista de archivos o una lista de campos entonce no se pueden borrar los datos del listbox.

entoces para llenar los datos del listoxbox, puedes en el vento init de la forma escribir un codigo como el siguiente:
select tabla
go top
scan
thisform.listbox.AddItem(tabla.campo)
endscan
con esto llenamos el listbox, con el metodo additem, ahora si te permite borrar los datos del listbox.

entonces en la propiedad MultiSelect = .T.
luego agregas un boton: en el evento click():
escribes los siguiente:

FOR nCnt = 1 TO ThisForm.ListBox.ListCount
IF ThisForm.ListBox.Selected(nCnt)
ThisForm.ListBox.RemoveItem(nCnt)
thisform.listbox.refresh()
ENDIF
ENDFOR

Espero te ayude de algo. Caulquier duda me respondes OK.
Osvaldo Rep. Panamá.



osvaldo
11 de Julio del 2003
Hola: laura recibi tu correo y te mande respuetas por el correo de la empresa, pero no estoy tan seguro si llegue asi que te tratare de explicar lo que hice, yo probe con algunas tablas y me funciona ojala sea l o que necesitas.

en el codigo del Boton escribes:

for i = 1 to THISFORM.listacheques.listcount
IF ThisForm.listacheques.Selected(i)
** se captura el numero de cheque que coincide con el seleccioando actual
** el 4 significa que es la (fila seleccinada, columna 4) osea num_cheque
vn_cheque = ThisForm.listacheques.list(i,4)
SELECT cheques
SET ORDER TO num_cheque
SEEK vn_cheque

** se abre la tabla depositados para agregarle los adtos de la tabla cheques
** osea el registro seleccioando en la lista.
SELECT depositados
INSERT INTO depositados ;
VALUES("banco....", cheques.banco, cheques.importe, cheques.portador, ;
cheques.num_cheque, cheques.titular, cheques.fecha_dep)

SELECT cheques
WAIT WIND "ELIMINANDO CHEQUE: " + cheques.num_cheque
DELETE
ENDIF
ENDFOR
** esto recalcula los datos de la lista
THISFORM.listacheques.Requery()

lo demas que estas haciendo esta bien:
la propiedad de listacheques deben ser:

listacheques.RowSource = "banco, importe, portador, num_cheque, titular, fecha_dep2

listacheques.RowSourceType = 6 (campos)
listacheques.Columncount = 6 &&nuemero de campos
listacheques.MultiSelect = .T.
listacheques.ColumnWidths = 60,60,60,60,60,60 (las configuras a tu modo hasta que queden bien)

Saludos.Cualquier cosa me avisas ok.
Osvaldo Rep. Panamá.