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

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Lun 15 Mar, 2004 3:22 pm Asunto: Problema con TreeView |
|
|
Hola foro!
Estoy utilizando el componente TTreeView para que el usuario seleccione qué tablas desea imprimir entre una serie de tablas que tiene el archivo que está abierto.
Hay nodos de dos niveles: 0 y 1
Si selecciono un nodo de nivel 0, se tiene que seleccionar automáticamente su padre.
Si selecciono un nodo de nivel 0, se tienen que seleccionar automáticamente todos sus hijos.
Si deselecciono un nodo de nivel 0, se tienen que deseleccionar automáticamente todos sus hijos. Y aquí es donde tengo el problema: cuando deselecciono un nodo de nivel 0 se deseleccionan TODOS los nodos del TreeView, ¡y no entiendo porqué!
Aclaro que el TreeView (que se llama ListaImpresion) tiene la propiedades:
MultiSelection=true
MultiSelectionStyle:
msShiftSelect=false
msControlSelect=false
msVisibleOnly=true
msSiblingOnly=false
En el evento OnKeyDown del TreeView tengo el siguiente código:
| Código: |
if (Key==17)
seleccionar=true;
|
En el evento OnKeyUp del TreeView tengo el siguiente código:
| Código: |
if (Key==17)
seleccionar=false;
|
Y en el evento OnClick del TreeView tengo el siguiente código:
| Código: |
TTreeNode *Node=ListaImpresion->Selected;
int i;
bool alguno=false;
if (Node->Selected==true && Node->Level==0 && seleccionar==true) {
for ( i=Node->AbsoluteIndex+1;i<=(Node->AbsoluteIndex+Node->Count); i++) {
ListaImpresion->Items->Item[i]->Selected=true;
}
}
else if (Node->Selected==false && Node->Level==0 && seleccionar==true) {
for (i=Node->AbsoluteIndex+1;i<=(Node->AbsoluteIndex+Node->Count);i++) {
ListaImpresion->Items->Item[i]->Selected=false;
}
}
else if (Node->Selected==true && Node->Level==1 && seleccionar==true) {
Node->Parent->Selected=true;
}
else if (Node->Selected==false && Node->Level==1 && seleccionar==true) {
for (i=Node->AbsoluteIndex+1;i<=(Node->AbsoluteIndex+Node->Count);i++){
if (ListaImpresion->Items->Item[i]->Selected==true)
alguno=true;
}
if (alguno==false) {
Node->Parent->Selected=false;
}
}
|
Espero que alguien me pueda ayudar porque yo ya no sé qué más vueltas le puedo dar!!
Muchas gracias! |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Mar 16 Mar, 2004 9:07 am Asunto: |
|
|
Bueno, creo que por fin lo he conseguido. Por si a alguien le interesa alguna vez, pego el código (evento OnClick del TreeView):
| Código: |
void __fastcall TMDIChild::ListaImpresionClick(TObject *Sender)
{
TTreeNode *Node=ListaImpresion->Selected;
int i, inicio, fin;
bool alguno=false;
inicio=Node->AbsoluteIndex+1;
fin=inicio+Node->Count;
if (Node->Selected==true && Node->Level==0 && seleccionar==true) {
for (int i=Node->AbsoluteIndex+1;i<=(Node->AbsoluteIndex+Node->Count);i++) {
ListaImpresion->Items->Item[i]->Selected=true;
}
}
else if (Node->Selected==false && Node->Level==0 && seleccionar==true) {
ListaImpresion->Deselect(Node);
for (i=inicio;i<fin;i++) {
Node=ListaImpresion->Items->Item[i];
ListaImpresion->Deselect(Node);
}
}
else if (Node->Selected==true && Node->Level==1 && seleccionar==true) {
Node->Parent->Selected=true;
}
else if (Node->Selected==false && Node->Level==1 && seleccionar==true) {
ListaImpresion->Deselect(Node);
inicio=Node->Parent->AbsoluteIndex+1;
fin=inicio+Node->Parent->Count;
for (i=inicio;i<fin;i++){
if (ListaImpresion->Items->Item[i]->Selected==true)
alguno=true;
}
if (alguno==false) {
ListaImpresion->Deselect(Node->Parent);
}
}
}
|
Saludos! |
|
| 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.
|