PDA

Ver la Versión Completa : Detectar cambio en Listbox


Anel Hernandez
18-10-2012, 11:37:38
Hola,

hay alguna manera de detectar que se cambio desde codigo el item seleccionado de un listbox, que no sea implementando un nuevo evento onchange?

gracias

nlsgarcia
21-10-2012, 02:31:27
Anel Hernandez,

Revisa este link: http://delphi.about.com/od/tlistbox/a/list-box-onchange-drag-drop.htm, en el encontraras un ejemplo descargable de como defnir un evento Onchange y Funcionalidad Drag And Drop a un Control Listbox por medio de una clase interceptora.

Quizás el ejemplo sea un poco complicado pero puedes eliminar todo, excepto lo relacionado a la funcionalidad del evento Onchange y adaptarlo a tu código.

Otras opciones son:

1- Verificar la propiedad Count del Listbox para saber si ha cambiado el número de elementos de la lista, pero esto no verifica si un elemento específico cambio su valor.

2- Tener un Listbox y un TStringList con los mismos elementos, con esta opción se puede verificar cambios del Listbox en el número de Items y su contenido por comparación con el TStringList.

Todo depende de lo que tu aplicación requiera

Espero sea útil :)

Nelson

Anel Hernandez
22-10-2012, 10:09:30
Hola,

lo que necesito es detectar desde codigo cuando se cambia la seleccion, no cuando cambia el texto del item.

gracias

Delfino
22-10-2012, 18:17:55
No te vale el evento OnClick?

Anel Hernandez
22-10-2012, 18:33:13
es que mando a seleccioanr desde codigo y el onclick no se entera.

gracias

roman
22-10-2012, 19:04:30
Puedes implementar la funcionalidad añadiendo un nuevo evento. La pregunta es, ¿por qué no quieres un nuevo evento?

// Saludos

Anel Hernandez
22-10-2012, 19:16:05
preguntaba si habia alguna forma mas sencilla que implementar un nuevo evento.

gracias

roman
22-10-2012, 19:26:33
No lo creo. Cambiar la selección por código involucra llamar al método SetItemIndex que manda el mensaje LB_SETCURSEL (http://msdn.microsoft.com/en-us/library/windows/desktop/bb761342(v=vs.85).aspx) mientras que la notificación de cambio de selección LBN_SELCHANGE (http://msdn.microsoft.com/en-us/library/windows/desktop/bb775161%28v=vs.85%29.aspx) no se envia con el mensaje anterior, de acuerdo a la documentación.

Lo que yo haría, es crear un derivado de TListBox que redefina los métodos Click y SetItemIndex para lanzar un nuevo evento OnSelectionChange.

Por otro lado, también podrías considerar el cómo haces el cambio de selección por código. Si lo haces en un sólo punto o lo puedes centralizar mediante algún método del formulario, entonces no requieres derivar un componente, simplemente hacer la notificación en ese punto o método central.

// Saludos