Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2006
huwabe78 huwabe78 is offline
Miembro
 
Registrado: oct 2006
Posts: 18
Poder: 0
huwabe78 Va por buen camino
demasiados edit para borrar

Consulta, en un form tengo varios edit, hay alguna manera de borrar varios edit al mismo tiempo en lugar de estar poniendole a cada edit .clear luego que los utilizo?

gracias y salu2
Responder Con Cita
  #2  
Antiguo 29-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Código Delphi [-]
for I := 0 to ComponentCount - 1 do
  if Components[i] is TEdit then
    TEdit(Components[i]).Clear;

Con esto borrarías todos los Edit en el formulario.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-11-2006
huwabe78 huwabe78 is offline
Miembro
 
Registrado: oct 2006
Posts: 18
Poder: 0
huwabe78 Va por buen camino
Te pido disculpas por no entender, soy estudiante y estoy tratando de iniciarme, por favor te pido paciencia, pero no comprendo a que se refiere esta parte:
for I := 0 to ComponentCount - 1 do

Como que tengo que declarar la I?
Responder Con Cita
  #4  
Antiguo 29-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
I sería una variable de tipo Integer. La puedes declarar local al procedimiento donde tengas la rutina. Por ejemplo:

Código Delphi [-]
procedure TForm1.LimpiarEdits;
var
  I: Integer;

begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TEdit then
      TEdit(Components[i]).Clear;
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 29-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola, para que te aclares un poco:

ComponentCount es una variable que contiene el nº de componentes que conforman el formulario actual.
Components es una matriz de componentes, que contiene punteros a todos los componentes del formulario.

Código Delphi [-]
if Components[i] is TEdit then
Aquí se busca si el elemento al que apunta "i" en la matriz, es un componente de l tipo TEdit, que en este caso es lo que nos interesa

Código Delphi [-]
TEdit(Components[i]).Clear;
Aquí accedemos al componente de tipo Tedit del formulario y lo que hace es borrar el contenido de ese campo.
Otra alternativa podría ser:
Código Delphi [-]
TEdit(Components[i]).Text := '';
Lo que hace es vaciar el contenido de la propiedad Text del Edit.

Espero te sirva.

Saludos
Responder Con Cita
  #6  
Antiguo 29-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Otra forma de hacerlo podría ser usando la función FindComponent. Esto podrías usarlo en el caso en que tus edits tenga el mismo nombre común y un indice. Es decir, tener cinco edits y que los llames así:
Edit1
Edit2
Edit3
Edit4
Edit5

Puedes usar la función FindComponent para acceder directamente al componente en cuestión, o hacer un bucle y vaciar los todos.

Por ejemplo para el caso de los 5 edits:

Código Delphi [-]
var x : Integer;
begin
   for x := 1 to 5 do begin
      (FindComponent('Edit' + IntToStr(x)) as TEdit).text := '';
   end;
end;

En este caso como sabemos que tenemos 5 edits se lo indicamos en el bucle.
Y para cada uno buscamos con la función FindComponent (que necesita como parametro un nombre de componente = propiedad name), que en nuestro caso tiene todos en común "Edit" y una parte numérica que la llamamos X. Hay que hacer un cast de esta X, ya que la función espera un parámetro de tipo string. Después se especifica si el componente encontrado es del tipo TEdit. Y luego hacemos lo mismo que arriba, vaciamos su Text.
Me ha quedado un poco lioso, así que si tienes dudas aquí estamos.

Saludos
Responder Con Cita
  #7  
Antiguo 29-11-2006
huwabe78 huwabe78 is offline
Miembro
 
Registrado: oct 2006
Posts: 18
Poder: 0
huwabe78 Va por buen camino
Te agradezco roman, pero la verdad es que no lo pude hacer funcionar.

Gracias y salu2
Responder Con Cita
  #8  
Antiguo 29-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En mi opinión muy personal, esa función FindComponent deberían eliminarla de la VCL. Usar FindComponent es como quere hacer de Delphi un lenguaje interpretado en donde se puede acceder a los objetos por sus nombres. Pero además, FindComponent es de por sí un ciclo sobre todos los componentes del formulario para buscar el que tenga el nombre dado, de manera que estaríamos haciendo un doble ciclo innecesario.

Si se requiere trabajar sistemáticamente con un grupo de controles, Edits en este caso, para mi lo mejor es declarar un arreglo:

Código Delphi [-]
Edits: array of TEdit

llenarlo al momento de construir el formulario y entonces iterar sobre el arreglo cuando se necesario.

// Saludos
Responder Con Cita
  #9  
Antiguo 29-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Por que razón no lo hiciste funcionar? Te dió algún error? Muéstranos el error y el código que pusiste para ayudarte.

Saludos
Responder Con Cita
  #10  
Antiguo 29-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por roman
En mi opinión muy personal, esa función FindComponent deberían eliminarla de la VCL. Usar FindComponent es como quere hacer de Delphi un lenguaje interpretado en donde se puede acceder a los objetos por sus nombres. Pero además, FindComponent es de por sí un ciclo sobre todos los componentes del formulario para buscar el que tenga el nombre dado, de manera que estaríamos haciendo un doble ciclo innecesario.

Si se requiere trabajar sistemáticamente con un grupo de controles, Edits en este caso, para mi lo mejor es declarar un arreglo:

Código Delphi [-]
Edits: array of TEdit

llenarlo al momento de construir el formulario y entonces iterar sobre el arreglo cuando se necesario.
Estoy contigo, sólo quería darle una alternativa más.
Alguna vez usé FindComponent, lo reconozco, en casos puntuales, lo usé.
Resulta mucho más cómodo, rápido y fiable usar un bucle como el que pusiste.

Saludos
Responder Con Cita
  #11  
Antiguo 29-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por huwabe78
Te agradezco roman, pero la verdad es que no lo pude hacer funcionar.
Mira el ejemplo que adjunto a ver si te aclara un poco.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip LimpiarEdits.zip (1,7 KB, 23 visitas)
Responder Con Cita
  #12  
Antiguo 30-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si no mal recuerdo, en Visual Basic puedes colocar arreglos de controles en el formulario. Es algo que siempre he pensado que hace falta en Delphi, precisamente para manejar estas cuestiones. Claro, no hay muchas otras cosas más que extrañe de VB

// Saludos
Responder Con Cita
  #13  
Antiguo 30-11-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Es que en VB directamente un componente, tiene la propiedad Index (o algo así)
Y cuando tú asignas un nombre a un componente y luego a otro, le asignas el mismo, te salta un mensaje de aviso: "Quieres crear una matriz". Dices que sí, y a partir de ese momento los dos componente pasan a llamarse:
Edit(1) y Edit(2)

Yo empecé con VB antes que con Delphi, y no cambio por nada Delphi, pero eso si lo vi claro cuando cogí Delphi la primera vez: se pueden crear matrices de componentes?? La respuesta fue clara: no!! (más adelante descubrí que no era verdad, pero no del mismo modo que en VB) Es lo único que hecho de menos.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
demasiados access violation ingel Varios 17 20-09-2006 03:53:25
Demasiados Caracteres en QReport JANDREGUE Impresión 1 24-04-2005 09:01:57
Metodo para borrar directorio VolaRe Varios 4 25-07-2004 16:29:52
Demasiados usuarios (2) muli Firebird e Interbase 6 11-05-2004 13:38:38
demasiados decimales Irina Varios 2 19-06-2003 14:24:33


La franja horaria es GMT +2. Ahora son las 13:21:37.


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
Copyright 1996-2007 Club Delphi