Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2007
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Question ComboBox con Objeto String asignado a cada item

He ligado un objeto string a cada item de un combo pero al momento de recuperarlo recupera PEDAZOS de cadenas escritas en el codigo del form y a vees recupera lo que corresponde para los items.

Si lo hago con Integer funciona bien pero necesito datos tipo String.

Código Delphi [-]

// carga de valores al combo
while not Table1.Eof do
  begin
   ComboBox1.Items.AddObject(Table1campo1.Value , TObject(Table1campo2.AsString));  {para enteros aquí pongo .AsInteger}
   Table1.Next;
  end;

// recuperacion de los valores
edit1.text := string(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
{para recuperar un entero en lugar de string(Tobject) pongo integer(Tobject)}

El codigo re recuperación lo uso en OnChange del combo para que cargue el valor que corresponde a cada item en un Edit. Y para algunos lo hace bien y para la mayoria carga parte de cadenas del codigo fuente.

¿se puede hacer lo que quiero? ¿Es problema de la conversion del OBJETO a String?

Gracias
Responder Con Cita
  #2  
Antiguo 17-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Con un String no se puede realizar tan rápido la cosa.

Un integer ocupa 2 bytes en memoria, exactamente lo mismo que un puntero a un objeto, de ahí que se pueda guardar el integer sin problema alguno.

Un string, es un puntero a memoria donde se guardará la cadena. Como no estas reservando memoria, estas escribiendo en una zona de memoria que no te pertenece. Que algunas veces recuperes parte de la cadena... es solo suerte, deberías recibir un Access Violation al asignar o recuperar la cadena de texto.

Soluciones hay muchas, pero creo que la más cómoda, es crearte tu propio objeto:
Código Delphi [-]

TCliente = Class(TObject);
public
  Nombre:string
  Facturado:Currency
end;


// carga de valores al combo
var C:TCliente;
while not Table1.Eof do
  begin
   C := TCliente.Create;
   C.Nombre := Table1campo2.AsString;
   C.Facturado := Table1campo1.Value;

   ComboBox1.Items.AddObject(Table1Campo1.Value , C);
   Table1.Next;
  end;

// recuperacion de los valores
edit1.text := TCliente(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Nombre;


//Antes de cerrar el Form, (o de vaciar el contenido del combo) tienes que liberar los objetos creados:
 For I:= combo.items.count-1 downto 0 do
   TCliente(Combo.items.objects[i]).Free;
He añadido el campo "Facturado" como mero ejemplo de que puedes guardar más cosas en el objeto.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 17-05-2007
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Thumbs up Muchas Gracias

Su puse que sería algo de eso!

Y estaba armando algo como tu ejemplo tomando como base otros hilos donde creaban un objeto Provincia!

Gracias!
Responder Con Cita
Respuesta



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
ComboBox ítem que está seleccionado belen Varios 7 05-09-2016 18:44:11
cómo saber en una listview el item que está visible (no seleccionado) en cada momento igc C++ Builder 1 16-02-2007 18:25:52
Referenciar un objeto Tabla mediante string Neomanar Conexión con bases de datos 2 18-08-2005 18:01:15
Selección automática item combobox neon OOP 0 24-02-2005 13:59:22
selecionar y mostrar por codigo un item den un ComboBox? dantemol OOP 2 09-11-2003 17:08:22


La franja horaria es GMT +2. Ahora son las 22:53:00.


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