 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
LIGERO Cmdr


Registrado: 13 May 2004Mensajes: 134Ubicación: Granada
|
Publicado: Mie 19 May, 2004 5:27 pm Asunto: Estructura del TreeView |
|
|
Hola Amigos:
Estoy intentando crear una estructura en un TreeView, pero no se como insertar correctamente los hijos en sus determinados padres.
¿Cómo me coloco correctamente en el padre al que le quiero insertar un hijo?
Un saludo Ligero |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 19 May, 2004 10:05 pm Asunto: |
|
|
Hola.
Para colocarte en un "padre" concreto, lo que debes hacer es recorrer el arbol hasta encontrarlo.
En este ejemplo quieres colocar en el digamos en el "PADRE1" lo que tenemos en la variable valor
(Adapta este codigo, solo es de ejemplo. Por ejemplo en la variable "valor" no hay nada.
| Código: |
TTreeNode *nodo;
int N;
AnsiString valor; // Lo que quiero insertar
N=TreeView1->Items->Count-1; // Primer elemento es 0
while (TreeView1->Items->Item[N]->Text!="PADRE1")
{
N--;
if (N==-1)
{
ShowMessage("ERROR. Elemento no encontrado");
break;
}
}
|
Una vez encontrado, obtienes un indice o posicion (variable N), y teniendo en cuenta este valor lo insertas
| Código: |
nodo=TreeView1->Items->AddChild(TreeView1->Items->Item[N],valor);
nodo->ImageIndex=-1; // Ninguna imagen
nodo->SelectedIndex=-1;
|
Si seleccionamos un elemento en el TreeView, podemos saberlo de la siguiente forma:
| Código: |
// Evento OnClick
if (TreeView1->Selected!=NULL)
{
N=TreeView1->Selected->AbsoluteIndex;
}
valor=TreeView1->Items->Item[N]->Text;
|
Si queremos saber a si pertenece al padre "PADRE1"
| Código: |
// Evento OnClick
int padre;
if (TreeView1->Selected!=NULL)
{
N=TreeView1->Selected->AbsoluteIndex;
for (int a=0; a<TreeView1->Items->Count; a++)
{
if (TreeView1->Items->Item[a]->Text=="PADRE1")
{
padre=a;
break;
}
}
if (TreeView1->Items->Item[N]->HasAsParent(TreeView1->Items->Item[padre])==true)
{
// pertenece al "PADRE1"
}
}
|
Bueno espero haberte aclarado un poco el tema.
Un saludito. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Jue 20 May, 2004 11:35 am Asunto: |
|
|
Gracias, pero eso o algo parecido ya lo he probado.
En principio creo los padres que son los Departamentos
| Código: |
while (!DM->IBQuery2->Eof)
{
cadena = DM->IBQuery2->FieldByName("NUMDPTO")->AsString+" - "+DM->IBQuery2->FieldByName("DESCRIPCION")->AsString;
TreeView1->Items->Add(NULL, cadena);
DM->IBQuery2->Next();
}
|
Después lo que quiero es crear los hijos de esos padres, por lo que recorro la tabla de secciones y para cada departamento, le incluyo sus secciones.
Pero el siguiente código debería de hacer lo que quiero, pero no lo hace.
Lo que hace es insertar en el primer Departamento todas las secciones, pero luego en vez de ir al siguiente Departamento, inserta en la primera sección del primer Dpto. las secciones del segundo Dpto. y así sucesivamente.
| Código: |
while (!DM->IBQuery2->Eof)
{
cadena = DM->IBQuery2->FieldByName("NUMSECCION")->AsString+" - "+DM->IBQuery2->FieldByName("DESCRIPCION")->AsString;
valor = DM->IBQuery2->FieldByName("NUMDPTO")->AsInteger;
Node1 = TreeView1->Items->Item[valor];
TreeView1->Items->AddChild(Node1, cadena);
DM->IBQuery2->Next();
}
|
Alguien me puede ayudar? |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Jue 20 May, 2004 4:32 pm Asunto: |
|
|
Saludos
Recuerda que cada que insertar un Item el orden de los demas items que estan debajo cambian... Probablemente tu problema es que no estas tomando como padre el item correcto despues de insertar los primeros hijos, por ejemplo, Tus departamentos son estos:
Compras
Ventas
Recursos Humanos
Hasta ahorita, Compras es el item 0, Ventas el 1 y RH el 2, pero en el momento en que tu insertes un hijo en compras, Ventas ya no sera el item 1 sino el item 2 y RH el 3, vuelves a insertar un hijo en Compras, y Ventas pasara a ser el 3, RH el 4 y asi sucesivamente....
Estoy casi seguro que ese es tu pboema porque de hecho yo tuve el mismo problema una vez...
Yo lo que pense fue en dos soluciones, cada que insertar un items ir controlando coin variables las posiciones de los padres, incrementandolos cuando se deba etc, para asi poder determinar en donde estan... Si hay forma de determinar quien es padre por medio del Texto o el apuntador Data, p[ues hacerlo.... y la ultima que se me ocurrio y es la que yo hice... tener un apuntador aparte para los Nodos Padre, y asi al crearle un hijo, meter como parametro este apuntador... esto me srivio a mi porque mis items padres siempre eran los mismos, en tu caso creo que debes analizar cual es tu mejor opciones....
Espero haber sido de ayuda y una disculpa por alargarme tanto... Saludos! _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Jue 20 May, 2004 5:44 pm Asunto: |
|
|
Gracias LordNemesys
Antes de leer tu respuesta ya había descubierto el problema que tiene el TreeView.
Pero ¿ Existe algun control que nos permita movernos de padre a hijo sin tener estas restricciones?
Un saludo Ligero |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|