![]() |
![]() |
| Paypal | 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 |
|