Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

ListView: cómo selecciono dos líneas mediante código?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ListView: cómo selecciono dos líneas mediante código? Responder citando

Sigo con mis dudas con los ListView...

Lo que quiero hacer es que, cuando el usuario seleccione una línea mediante un click, se seleccione de manera automática la siguiente línea siempre que la primera línea cumpla una condición.

Tengo la propiedad MultiSelect a true, y la propiedad HideSelection a false.

En el evento OnSelectItem, tengo el siguiente código:

int indice=Item->Index;
if (Selected==true && condicion==true)
Lista->Items->Item[indice+1]->Selected=true;

Al ejecutar el programa y seleccionar una línea, se puede ver que la línea siguiente efectivamente se selecciona y permanece de color azul mientras el usuario tiene el botón del ratón pulsado. Pero en cuanto se suelta el botón, solo permanece seleccionada la primera línea.

¿Cómo puedo hacerlo?

Muchas gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Bueno, el parámetro Selected del evento OnSelectItem indica que el elemento está seleccionado (Selected = true) y tambien cuando dejar de estarlo (Selected = false); por lo que en el momento que seleccionas el siguiente elemento a través de código, se vuelve a disparar el evento, es por eso que sólo ves el fecto que deseas cuando mantienes presionado el botón del ratón....otra forma de hacerlo es utilizando el evento OnClick...

Código:
void __fastcall TForm1::ListaClick(TObject *Sender)
{
    // Se valida que al menos exista un elemento seleccionado y que
    // el elemento seleccionado sea el penúltimo ( para evitar intentar
    // seleccionar un elemento cuyo indice quede fuera del intervalo)
    if ( Lista->Selected != NULL && Lista->Selected->Index < Lista->Items->Count - 1 )
        Lista->Items->Item[Lista->Selected->Index + 1]->Selected = true;
}


En esta porción de código solo faltaria agregar tu condición que deseas que se cumpla.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Muchas gracias Buildero, funciona de maravilla!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.