Hola, no entiendo algunas asignaciones, como esa que haces de:
c:= (form2.Components[i].Name) as string;
¿"c" es una vraible tipo string o tipo TComponent o tipo TEdit ...? Como luego haces c.Text := '';
Tampoco entiendo que luego busques de nuevo, usando FindComponent, un componente al que ya estás accediendo mediante el array Components.
Para no extenderme más prueba a ver si es esto lo que andas buscando:
Código Delphi
[-]
for i:= 0 to form2.ComponentCount-1 do
if Form2.Components[i] is TEdit then
TEdit(Form2.Components[i]).Text := '';
Saludos