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 

intercambio de dos items en un listview

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: intercambio de dos items en un listview Responder citando

Hola de nuevo.
Tengo un pequeño problema al intercambiar 2 items dentro de un listview.
el codigo que uso es:
Código:
int x;
TListItem * Elemento;
TListItem * Elemento2;
for(x=1;x<canales>Items->Count;x++){
   if(canales->Items->Item[x]->Selected){
         Elemento=canales->Items->Item[x];
         Elemento2=canales->Items->Item[x-1];
         canales->Items->Item[x-1]=Elemento;
         canales->Update();
         canales->Items->Item[x]=Elemento2;
         canales->Update();
         break;
         }
}

El problema está en que Elemento y Elemento2 son punteros y cuando cambio el valor del item Elemento2 toma el valor de Elemento
¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere

Saludos, Bosoft
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: intercambio de dos items en un listview Responder citando

bosoft escribió:
¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere

No lo he probado nunca, pero inténtalo con swap.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: intercambio de dos items en un listview Responder citando

Angel escribió:
bosoft escribió:
¿como intercambiar los datos de los items completos?
No se trata de una ordenación, es el user quien coloca los items donde quiere

No lo he probado nunca, pero inténtalo con swap.


Hola Angel.
Podrías ponerme una linea ejemplo? No encuentro el swap desde items en el 2007

Gracias
Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Quizás esto te sirva de ayuda:

Código:
void CambiaItems(TListItem* Elemento1, TListItem* Elemento2)
{
   TListItem* Temporal = new TListItem(Elemento1->Owner);

   Temporal->Caption = Elemento1->Caption;
   Temporal->SubItems->Assign(Elemento1->SubItems);
   Elemento1->Caption = Elemento2->Caption;
   Elemento1->SubItems->Assign(Elemento2->SubItems);
   Elemento2->Caption = Temporal->Caption;
   Elemento2->SubItems->Assign(Temporal->SubItems);

   delete Temporal;
}


Si tienes que cambiar más datos, como imágenes..., sigue el método de este ejemplo.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: intercambio de dos items en un listview Responder citando

bosoft escribió:
Podrías ponerme una linea ejemplo? No encuentro el swap desde items en el 2007

swap es un comando de la librería estándar de C++. De acuerdo con la ayuda genérica de Builder:

Cita:
Standard C++ Library: Class Reference
swap

Summary
Exchanges values.

Synopsis
#include <algorithm>
template <class>
void swap (T& a, T& b);

Description
The swap algorithm exchanges the values of a and b. The effect is:

T tmp = a
a = b
b = tmp

Por lo tanto debería funcionarte algo así:
Código:
swap(Elemento, Elemento2);

Pero ya te digo que no lo he hecho; simplemente, he aplicado la lógica del comando lo que no significa que esté bien.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Muchas gracias a los dos, probaré de las 2 maneras a ver cual es mas cómoda

Saludos, Bosoft
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Aquí dejo un código mas optimizado para intercambiar dos Item de un ListView

Código:
void CambiaItems(TListItem* Elemento1, TListItem* Elemento2)
{
   if(Elemento1==0 || Elemento2==0) return;

   TListItem* Temporal = new TListItem(Elemento1->Owner);

   Temporal->Assign(Elemento1);
   Elemento1->Assign(Elemento2);
   Elemento2->Assign(Temporal);

   delete Temporal;
}



Saludos.
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.