FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
TListView "desaparece"
En un aplicación con BCB 6 estoy teniendo problemas; seguro que es un error de concepto mio pero no soy capaz de verlo.
Tengo un TListView con Checkboxes activado y definido en tiempo de diseño y que relleno por código. Ahí no tengo ningún problema. Una vez que he seleccionado las líneas que me interesan hago una comprobación con este código: Código:
lPrueba = false; nFcargo = 1; switch (ContarLista(fSelRec->Lista)) { case 0: delete fSelRec; Mensaje(3, "No seleccionó ningún recibo.", "Volver"); Button2Click(NULL); return; case 1: for (nItem = 0; nItem < fSelRec->Lista->Items->Count; nItem ++) if (fSelRec->Lista->Items->Item[nItem]->Checked && StrToInt(fSelRec->Lista->Items->Item[nItem]->SubItems->Strings[2]) == Month) { lPrueba = true; break; } default: if (!lPrueba) { cAux = "¿Desea generar los recibos seleccionados con fecha de cargo " + dFcargo.FormatString("dd/mm/yyyy', '") + "\nen la fecha propuesta u otra fecha?"; nFcargo = Mensaje(2, cAux, dFcargo.FormatString("dd/mm/yyyy") + "\nFecha propuesta\nOtra fecha"); } break; } fForBln->Barra->MaxValue = fSelRec->Lista->Items->Count; Código:
int ContarLista(TListView *evLista) { int nHay = 0; for (int nValor = 0; nValor < evLista->Items->Count; nValor ++) if (evLista->Items->Item[nValor]->Checked) nHay ++; return nHay; } Cita:
|
#2
|
||||
|
||||
¿Y ese delete fSelRec que tienes en el case 0 no tendrá algo que ver?
LineComment Saludos |
#3
|
||||
|
||||
Fíjate que después del delete hay un return con lo que el resto del código no se ejecuta. No obstante después de poner el mensaje seguí haciendo pruebas y el problema no está dónde yo creía. He cambiado un poco la estructura del programa y lo he dejado así:
Código:
lPrueba = false; nFcargo = 1; switch (nListView) { case 0: delete fSelRec; Mensaje(3, "No seleccionó ningún recibo.", "Volver"); Button2Click(NULL); return; case 1: DecodeDate(dFcargo, Year, Month, Day); for (nItem = 0; nItem < fSelRec->Lista->Items->Count; nItem ++) if (fSelRec->Lista->Items->Item[nItem]->Checked && StrToInt(fSelRec->Lista->Items->Item[nItem]->SubItems->Strings[4]) == Month) { lPrueba = true; break; } } fForBln->Show(); fForBln->IniBarra("Preparando recibos"); fForBln->Barra->MaxValue = fSelRec->Lista->Items->Count; if (!lPrueba) { cAux = "¿Desea generar los recibos seleccionados con fecha de cargo " + dFcargo.FormatString("dd/mm/yyyy', '") + "\nen la fecha propuesta u otra fecha?"; nFcargo = Mensaje(2, cAux, dFcargo.FormatString("dd/mm/yyyy") + "\nFecha propuesta\nOtra fecha"); } Código:
void __fastcall TfForBln::IniBarra(AnsiString cMensaje) { Barra->MaxValue = 0; Barra->MinValue = 0; Barra->Progress = 0; LblBar->Caption = cMensaje; Application->ProcessMessages(); this->Refresh(); } |
#4
|
||||
|
||||
Sigo haciendo pruebas y dejando el código como en el primer mensaje que subí, con los dos case y el default, he comprobado que si ejecuta la llamada nFcargo = Mensaje(2,... también se "borra" el contenido del TLIstView; es como si por el simple hecho de llamar a otro formulario se borraran elementos del formulario activo.
|
#5
|
||||
|
||||
Aveces errores a distancia se manifiestas en zanas de código que no deberían y eso es porque la ejecusión en windows no es lineal l las fugas de memoria tienen efectos tardíos. Vigila lo que hace tu función Mensaje y eventos que puedan estar saltando y que usen mal algún puntero.
Sobre el fragmento con el delete: Código:
switch (nListView) { case 0: delete fSelRec; Mensaje(3, "No seleccionó ningún recibo.", "Volver"); Button2Click(NULL); return; Saludos. |
#6
|
||||
|
||||
Button2Click(NULL) es esto:
Código:
void __fastcall TfGenRec::Button2Click(TObject *Sender) { if (RadioGroup1->Enabled) this->Close(); else { FormCreate(NULL); MaxFec->OnExit = FechaExit; MinFec->OnExit = FechaExit; } return; } |
#7
|
||||
|
||||
Hola.
Cita:
Código PHP:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
Probaré, que no se me había ocurrido. Pero en otros sitios que uso esa función men funciona bien. Y además recalcar que el problema no debe estar ahí porque si fuera así, el switch que evalúa ese valor se iría siempre por el default y no es el caso.
|
#9
|
||||
|
||||
Ya he descubierto donde está el problema. Cuando cierro cualquier formulario, el evento OnClose tengo esto:
Código:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } |
#10
|
||||
|
||||
Ni hablar. Al mejor cazador se le va la liebre...
LineComment Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" | dec | Internet | 9 | 04-08-2015 16:11:50 |
Mostrar un "Balloon Hint" usando un componente "TTrayIcon" | JuanOrtega | Varios | 3 | 29-11-2014 19:34:43 |
El programa se queda "colgado" mientras copia y luego "despierta" | NeWsP | OOP | 5 | 10-03-2010 22:05:40 |
El caracter "+" me desaparece | papulo | PHP | 1 | 09-03-2008 04:44:31 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
|