FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Comportamiento extraño de TVirtualStringTree
Me está ocurriendo algo que no soy capaz de comprender. Tengo este TVST en un formulario.
y en el evento OnChecked tengo puesto este código: Código:
int nRecibo = 0; double nImporte = 0; Button1->Enabled = false; Button2->Enabled = false; Nodo = Lista->GetFirst(); while (Nodo != NULL) { if (!Lista->HasChildren[Nodo] && (Lista->CheckState[Nodo] == csCheckedNormal || Lista->CheckState[Nodo] == csCheckedPressed)) { nRecibo = nRecibo + ((PTreeSelRec)Lista->GetNodeData(Node))->Recibos; nImporte = nImporte + ((PTreeSelRec)Lista->GetNodeData(Nodo))->Importe; } Nodo = Lista->GetNext(Nodo); } Button1->Enabled = fNueRec->Button1->Tag != 3 ? nRecibo > 0 && nImporte > 0 : nRecibo > 0 && nImporte > 0 && RadioGroup1->ItemIndex >= 0; Button2->Enabled = Button1->Enabled; HeaderControl1->Sections->Items[1]->Text = nRecibo > 0 ? (String)FormatFloat("'Recibos: '###,##0", nRecibo) : (String)""; HeaderControl1->Sections->Items[2]->Text = nImporte > 0 ? (String)FormatFloat("'Importe: '#,###,##0.00 €", nImporte) : (String)""; |
#2
|
||||
|
||||
Hola Ángel,
Puesto que en tu código parece que estás iterando por todos los nodos... ¿estás seguro de que es el evento "OnChecked " el que se ejecuta tantas veces como nodos existentes? ¿No será que lo que se ejecuta 37 veces es el código que tienes dentro del bucle "while"? En todo caso... salte de tu app... esto es... crea una app nueva, sólo para pruebas, coloca un componente de este tipo con un par de nodos... y haz la misma prueba, usa el mismo evento (pero no el mismo código dentro del evento) a ver qué puedes observar. |
#3
|
||||
|
||||
No he utilizado ese componente pero se me ocurre que compruebas una cosa. En tu imagen aparece un nodo llamado Seleccionar todos y otro llamado Banco de los que cuelgan el resto.
Si haces check en uno de esos nodos con hijos se activan todos los hijos y eso puede ser la causa de la múltiple generación de eventos OnChecked (esto lo puedes comprobar viendo cuantas repeticiones ocurren checkando un nodo sin hijos). Si es este es el caso, quizás deberías cambiar a un OnClick que sólo se generaría una vez. Como apunta dec, el bucle se va a repetir tantas veces como nodos tengas, pero eso es justo lo que buscas para recorrerlos todos. Saludos. |
#4
|
||||
|
||||
Gracias por las respuestas.
Cita:
Esa prueba no se me había ocurrido. Lo haré a ver que pasa. |
#5
|
||||
|
||||
Para no variar tienes razón. En OnClick funciona perfectamente. Gracias.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Comportamiento extraño PrinterSetupDialog | newtron | Varios | 2 | 19-11-2021 16:32:43 |
Un comportamiento extraño. | TiammatMX | Varios | 5 | 03-09-2013 22:54:07 |
Extraño comportamiento de ADO | r1d2m3 | Conexión con bases de datos | 3 | 12-12-2009 19:08:32 |
Un comportamiento extraño en delphi... | uper | Varios | 1 | 07-08-2004 00:44:14 |
Comportamiento extraño de Delphi | walrus | Varios | 3 | 05-08-2004 10:04:32 |
|