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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.