Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Exception eInvalidCast con FindComponent (https://www.clubdelphi.com/foros/showthread.php?t=58119)

mrnovice 09-07-2008 17:05:19

Exception eInvalidCast con FindComponent
 
Saludos foreros de ClubDelphi, disculpen la molestia nuevamente, estoy intentando agarrar un fichero txt donde vengan algunos nombres los componentes, para guardar configuraciones,un ejemplo de ello sería así

SpinEdit1.Name='SpinEdit1';
Checkbox1.Name='Checkbox1';
en el fichero txt esta asì
==============
SpinEdit1=50
Checkbox1=-1
===============
bueno lo cargo en el Form, pero este no es un proyecto normal,porque simàs no recuerdo me funcionó en Formulario normal, mi proyecto esta dentro de una DLL,bueno
Gracias a Dec me dijo como en este link
--------------------------------------------------------------------
lo qué pasa al tener este código:
Código Delphi [-]
var chBox :TcheckBox;
//-----------------
 try
    chBox := (Self.FindComponent(valorX) as TCheckBox);
 except
    on EInvalidCast do showmessage('Exception!!');
 end;
pues al encontrar el SpinEdit1 me arroja EInvalidCast, no me respeta el exception, ya sè porque es un TSpinEdit y no un TCheckbox, cómo pudiera hacerle para pudiera localizar todos los diferentes componentes sin que me tire excepciones?
----------------------------------------------------------------
intente usando una especie de TComponent, pero puess no funcionó.
Alguna sugerencia? osea intento buscar componentes dentro del mismo Formulario.
Nosé si quedo claro el planteamieno XD.
Gracias de antemano cualquier sugerencia será bienvenida

coso 09-07-2008 18:17:52

hola. Si te esta dando ese error es porque ValorX tiene que ser diferente de 'CheckBox1'...me parece que valorx lo vas cambiando. Entonces lo que deberias hacer es, simplemente, obviar la excepcion, por ejemplo

Código Delphi [-]
var
   checkbox : TCheckBox;
   spinedit  : TSpinEdit;
   editbox : TEdit;
  ...
begin
   checkbox := nil;
   spinedit := nil;
   editbox := nil;
   ...

   for i := 0 to numero_componentes_cargados do
   begin
        valorx := Nombres_componentes[i];

        if checkbox := nil then
        try 
            checkbox := (FindComponent(Valorx) as TCheckBox);
        except 
        end;

        if spinedit = nil then
        try
            spinedit := (FindComponent(Valorx) as TSpinEdit);
        except
        end;
        
        if edit = nil then
        ...
   end;
   ...
   if edit = nil then ShowMessage('No se encontro el componente edit');
   if checkbox = nil then ShowMessage('No se encontro el checkbox');
   if spinedit = nil then ShowMessag('No se encontro el spinedit');
  ....
  // etc...
end;

son importantes los = nil ya que sino es posible que se perdieran si anteriormente se hubiesen cargado. Saludos.

luisgutierrezb 09-07-2008 18:59:52

Podrias usar un if asi:

Código Delphi [-]
if Self.FindComponent(valorX) is TCheckBox then
  chBox := (Self.FindComponent(valorX) as TCheckBox);

mrnovice 10-07-2008 01:38:58

Saludos
 
Gracias, voy a intentarlo, luego les comento los resultados.


La franja horaria es GMT +2. Ahora son las 18:42:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi