| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ferpb Invitado
|
Publicado: Mar 24 Sep, 2002 12:17 pm Asunto: cambiar componentes iguales de un form |
|
|
hola,
esta vez mi pregunta es acerca de la herencia de objetos. No se que poner en el buscador para obtener respuesta, pero seguro que alguno de vosotros la sabe.
Si en un form tengo varios Edit, etc y quiero aplicarle el mismo metodo a todos los objetos del mismo tipo, no se puede llamar a algun objeto de orden superior en el form para no tener que ir uno a uno?
ejemplo:
Edit1->Clear();
Edit2->Clear();
...
Editn->Clear();
hacer algo como (algo aqui)->Clear(); que me lo aplique a todos los edit...
es que lo veo util para limpiar de datos el form sin tener que escribir todas esas lineas.
Muchas... de antemano |
|
| Volver arriba |
|
 |
KAYETANO Ens

Registrado: 04 Sep 2002Mensajes: 37
|
Publicado: Mar 24 Sep, 2002 2:35 pm Asunto: |
|
|
Hola
Me da que no tienes muy claro lo que es un objeto y lo que es una clase, pero bueno, al tema, lo que puedes hacer es una funcion miembro del Form en el que se encuentran los Edit que realice el Clear de todos ellos.
| Código: | void __fastcall TForm1::Borrar()
{
Edit1->Clear();
...
EditX->Clear();
} |
Esta seria la version chapuza otra opcion mas optimizada seria utilizando la funcion | Código: | Form1->FindComponent() | Esta funcion permite buscar componentes a partir de su nombre.
O incluso mas depurado con las propiedades
| Código: | Form1->ComponentCount;
Form1->Components |
Con lo que podemos recorrer todos los componentes del Form y si son de tipo Edit llamar a la funcion "Clear"; _________________ Salu2
KAYETANO |
|
| Volver arriba |
|
 |
ferpb Invitado
|
Publicado: Mar 24 Sep, 2002 3:28 pm Asunto: |
|
|
| La primera opcion ya la sabia y era la que queria evitar. Gracias por la segunda mas refinada, era justo lo que queria saber. Tengo mas o menos clara la diferencia entre clase y objeto, lo que pasa es que se me va la olla (siento haber confundido).unsaludo |
|
| Volver arriba |
|
 |
KAYETANO Ens

Registrado: 04 Sep 2002Mensajes: 37
|
Publicado: Mar 24 Sep, 2002 4:07 pm Asunto: |
|
|
Hola
Yo te aconsejo la tercera, es la mas fina y generica, mas adelante puedes usarla para cualquier conjunto de objetos.
Tambien hay que decir que es la mas currada. _________________ Salu2
KAYETANO |
|
| Volver arriba |
|
 |
tyloya Master

Registrado: 20 Ago 2002Mensajes: 175
|
Publicado: Mar 24 Sep, 2002 4:56 pm Asunto: Solución |
|
|
Hola!
Lo que puedes hacer es esto:
TEdit *edt;
for (int i=1; i<=64; i++) {
edt = dynamic_cast<TEdit*>(FindComponent("Edit"+String(i)));
// aqui lo que quieras hacer, por ejemplo, mirar que tenga texto
if (edt->Text!="") { edt->Text=" " }//así limpias lo que contenga.
} |
|
| Volver arriba |
|
 |
ferpb Invitado
|
Publicado: Mie 25 Sep, 2002 7:28 am Asunto: |
|
|
| gracias a los dos. digamos que a partir de lo que ha dicho kayetano tenia pensado estrujarme hasta hacer algo parecido a lo que ha indicado tloya, pero me has ahorrado el trabajo. un saludo |
|
| Volver arriba |
|
 |
ferpb Invitado
|
Publicado: Mar 01 Oct, 2002 7:41 am Asunto: |
|
|
hola de nuevo,
he encontrado este trozo de código. Recorre todos los controles del form y si son custoedit(incluye memo y richedit) los limpia. se puede hacer unicamente para los edit. lo hace recursivo para tratar los que esten dentro de paneles, etc. El codigo lo he obtenido de Borland HowTo de www.thebits.org
void __fastcall ClearEdits(TWinControl *swCont)
{
TCustomEdit *MyEdit;
for(int x = 0; x <swCont->ControlCount; x++)
{
MyEdit = dynamic_cast <TCustomEdit *>(swCont->Controls[x]);
if(MyEdit)
MyEdit->Text = "";
else
if(dynamic_cast <TWinControl *>(swCont->Controls[x]))
ClearEdits(dynamic_cast <TWinControl *>
(swCont->Controls[x]));
}
} |
|
| Volver arriba |
|
 |
|