Programación General > C++ Builder

 Mostrar Datos En Un Tlistview Mediante Un Bucle

(1/2) > >>

Ziara:
Hola a todos, querría saber cómo mostrar datos en un TListView de un bucle for que va generando unos datos, en Builder C++, pongo un ejemplo:

tengo en un Unit2.h


--- Código: Text ---class Recorrer{ private:          String cadena; public:          void FuncionRec();          String DevCadena(void){return cadena;}} 
tengo un un Unit2.cpp


--- Código: Text ---void Recorrer::FuncionRec(){    int i;    for(i=0; i<5; i++)    {      cadena = "hola mundo";      cadena2="adios mundo";    }}  
Y ahora en el Form1 del Unit1 agrego el componente TListView y en Unit.cpp:


--- Código: Text ---Recorrer *re = new Recorrer();re->FuncionRec();  //llamo a la funcion que contiene el for TListItem *Itema;Itema = ListView1->Items->Add();Itema->Caption = re->DevCadena();Itema->SubItems->Add(re->DevCadena2()); delete re; 

Pero con lo anterior sólo me muestra el contenido del for una vez, ¿cómo se podría hacer que se mostrase las veces indicadas en la variable i? Porque he visto que hay una propiedad Count de Items que es para cuando recorres un TListView, pero si inicialmente no tengo nada en TListView no tengo nada que recorrer no?

saulillo:
Hola.

haber, si no creo mal, tienes una funcion llamada recorrer, con un bucle for. El bucle se ejecuta unas 5 veces y cada vez haces q cadena valga "hola mundo" y cadena2 "adios mundo". Si haces una traza veras q si i=0, cadena="hola mundo", cadena2="adios mundo"; i=1, cadena="hola mundo", cadena2="adios mundo"; i=2...

Si quieres q lo muestre cada vez q entres al for, tendras q poner el ListView1->Items...  dentro del for.

Lo siento sino me he explicado bien, si no lo entiendes avisas e intento explicarlo mejor.

Ziara:
Hola de nuevo y gracias por contestar tan rápido,


--- Citar ---haber, si no creo mal, tienes una funcion llamada recorrer, con un bucle for. El bucle se ejecuta unas 5 veces y cada vez haces q cadena valga "hola mundo" y cadena2 "adios mundo". Si haces una traza veras q si i=0, cadena="hola mundo", cadena2="adios mundo"; i=1, cadena="hola mundo", cadena2="adios mundo"; i=2...
--- Fin de la cita ---

Cierto, es lo que hace la funcion FuncionRec que es un método de la class Recorrer.


--- Citar ---Si quieres q lo muestre cada vez q entres al for, tendras q poner el ListView1->Items... dentro del for.

--- Fin de la cita ---

Vale.. eso lo pillo, pero el problema es que la class está de un Unit2 y el Formulario (Form1) que contiene mi TListView está en un Unit1 y si incluyo las declaraciones del ListView en el Unit2 me da el siguiente error:

[C++ Error] Unit2.cpp(1): Unable to invoke Code Completion due to errors in source code


Tiene que haber alguna forma de mostrar los cinco reglones en el TListView del Unit1 llamando a la función que está en Unit2 no? alguna idea?

Espero haberme explicado bien.

Ziara:
El fallo está en que en:


--- Código: Text ---void Recorrer::FuncionRec(){   int i;   for(i=0; i<5; i++)   {     cadena = "hola mundo";     cadena2="adios mundo";   }} 
se va machacando las variables cadena y cadena 2 por lo cual cuando en el Unit1 se llama a:


--- Código: Text ---Recorrer *re = new Recorrer();re->FuncionRec();  //llamo a la funcion que contiene el for TListItem *Itema;Itema = ListView1->Items->Add();Itema->Caption = re->DevCadena();Itema->SubItems->Add(re->DevCadena2()); delete re; 
únicamente muestra la última iteración en el ListView.

Hay alguna forma en un for de preservar los mismas variables sin que se machaquen y así poder mostrarla en el ListView, o si no... alguna alternativa?

giropau:
Es raro que si incluyes el Unit1.h en el Unit2 te de ese error. Siempre lo he echo así y me funciona, debe ser que hay alguna otra cosa mal que salta cuando haces el include. Otra cosa que podrias hacer es hacer un array y que cada vuelta del bucle llene una posicion diferente. En tu caso serian dos arrays o una tabla bidimensional. Si lo haces así en el unit1 tendrias que hacer otro bucle para mostrar los valores. no se si es la mejor forma pero es una idea.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa