Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Seleccionar un ítem de un ListView

Tengo este formulario con un TListView.

y este código:
Código:
void __fastcall TfSelMun::ListaSelectItem(TObject *Sender, TListItem *Item, bool Selected)
{
     pItem = NULL;
     Button1->Enabled = false;
     if (Selected)
     {
          pItem = Item;
          Button1->Enabled = true;
     }
}
//---------------------------------------------------------------------------
pItem es un TListItem. Acabo de darme cuenta que no está funcionando bien.

Al seleccionar un ítem del ListView y pasar por la función el valor de Item de la llamada es el correcto (por ejemplo el de la imagen, VALETIN (COAÑA)), pero al pasar la línea pItem = Item en la variable pItem no está ese valor si no el del primer elemento de la tabla, no sé si he sabido explicarme; aparece esto:
Cita:
Item->Caption = "VALETIN (COAÑA)";
pItem->Caption = "ASTAS";¿Qué estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Angel.Matilla.

En la parte veo de tu código no estas haciendo nada mal.

Si comparas los valores de la propiedad Caption inmediatamente después de la asignación,
Código:
 pItem = Item;
veras que son iguales.

Para verificar lo que te comento, hacé esta simple prueba en el evento OnSelectItems del TListView:
Código:
...

void __fastcall TForm1::ListView1SelectItem(TObject *Sender,
      TListItem *Item, bool Selected)
{
  pItem = Selected ? Item : NULL;
  if (Selected) ShowMessage(Item->Caption+" "+pItem->Caption);
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-05-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por la respuesta pero algo no funciona bien. Con el código que me has sugerido tengo esto:



Esto está sacado con el depurador una vez que se ha ejecutado la línea pItem = Selected ? Item : NULL;, y como pudes ver el caption de ambos elementos es distinto. He cambiado algo en el código desde el que llamo a este formulario, que es una pantalla de ayuda; ahora está así:
Código:
Application->CreateForm(__classid(TfSelMun), &fSelMun);
for (; !fSocios->Query->Eof; fSocios->Query->Next())
{
     pItem = fSelMun->Lista->Items->Add();
     pItem->Caption = fSocios->Query->FieldByName("Poblacion")->AsString;
     pItem->SubItems->Add(fSocios->Query->FieldByName("CodPostal")->AsString);
}

fSelMun->Lista->Items->Item[0]->Selected = true;
fSelMun->Lista->Selected->MakeVisible(true);
pItem = NULL;

if (fSelMun->Lista->Items->Count > 1)
     fSelMun->ShowModal();

if (pItem != NULL)
{
     if (Cpostal->Text.IsEmpty())
          Cpostal->Text = pItem->SubItems->Strings[0];
     Poblacion->Text = pItem->Caption;
}
delete fSelMun;
Y el cóigo en ese formulario fSelMun está así:
Código:
void __fastcall TfSelMun::ListaSelectItem(TObject *Sender, TListItem *Item, bool Selected)
{
     Button1->Enabled = false;
     pItem = Selected ? Item : NULL;

     if (Selected)
          Button1->Enabled = true;
}
Lo cierto es que si denjo la línea del ShowMessage para comprobar los valores puedo ver esto:



Siendo ese el registro que está realmente seleccionado en el ListView, pero cuando vuelvo al formulario desde el que se ha llamado ¡pItem viene vacío! He probado usando una variable auxiliar y curiosamente me funciona bien, pero es ya más una cuestión de orgullo.
Responder Con Cita
  #4  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Angel.Matilla.
Cita:
Esto está sacado con el depurador una vez que se ha ejecutado la línea pItem = Selected ? Item : NULL;, y como pudes ver el caption de ambos elementos es distinto.
Sin embargo debo insistir que la divergencia de valores se produce en otro punto del programa y no inmediatamente después de la asignación.

Copié los datos de tu imágen en un TListView y usando el código que te sugerí en el evento OnSelectItem, en todos los casos la propiedades Caption de Item y pItem se corresponden.

Te ajunto el código fuente de la prueba para que lo revises con tranquilidad.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-09-2014 a las 03:45:25.
Responder Con Cita
  #5  
Antiguo 30-05-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Estoy de acuerdo en tu idea, pero no soy capaz de ver dónde ocurre. No obstante, y como ves en la última imagen que he subido, sí tienen el mismo valor. Voy a probar definiendo un TLisItem sólo para ese módulo y, por supuesto, miraré tú código con lupa
Responder Con Cita
  #6  
Antiguo 30-05-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Vale. Creo que ya lo solucioné. El problema reside en un error de concepto mío: para "ahorrarme" tiempo defino una serie de variables auxiliares que uso indistintamente en diversos sitios de la aplicación. Lo que pasa es que a veces esas variables que uso en un formulario tiene en otro que está debajo otro valor que es el que se recupera al volver a él. Lo he arreglado definiendo una varable en el formulario donde se me daba el problema.
Responder Con Cita
  #7  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Angel.Matilla.

Otra cosa que podrías revisar es el ámbito de la variable pItem, ¿Algún otro form que TfSelMun tiene acceso a ella ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 30-05-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Otra cosa que podrías revisar es el ámbito de la variable pItem, ¿Algún otro form que TfSelMun tiene acceso a ella ?
Sí. Eso tengo que cambiarlo; es una mala manía mía.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al insertar item en ListView avechuche Varios 2 06-07-2013 02:32:40
Seleccionar item de combobox forgiveness Conexión con bases de datos 1 16-11-2009 21:00:23
seleccionar item en TdbLockupListbox!!!!!! david_uh Varios 1 22-05-2007 20:19:10
Seleccionar un item de un List Box zvf OOP 2 06-04-2006 17:45:38
Posicionar un ListView en su último Item. DarkByte OOP 3 04-12-2004 21:22:42


La franja horaria es GMT +2. Ahora son las 06:40:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi