Juan Fco. Berrocal -- DotNET y Yo transmitiendo desde GeeKs.Ms

Limpiar informacion de los controles (TextBox's) Rapidamente

Esto es un tips muy facilito de como limpiar informacion en los controles de un formulario este caso el TextBox.

 Como todos saben en .NET podemos limpiar informacion de un TextBox con un metodo llamado "Clear ( )" y tambien lo podemos hacer de esta manera: TextBox1.Text = " ";

Pero que pasa si tenemos muchos TextBox's en nuestro formulario, entonces tendriamos que ir uno por uno agregandole el metodo "Clear ( )". Pero con foreach lo podemos hacer de la siguiente manera.

El codigo en C# seria el siguiente.

private void btnLimpiar_Click(object sender, EventArgs e)

{

    //Limpiar de manera rapida

    foreach (Control c in this.Controls)

    {

      if (c is TextBox)

        {

           c.Text = "";

           //Enfoco en el primer TextBox

            this.textBox1.Focus();

        }

     }

}

y listo!!!, ya todos los controles estaran listos para insertar informacion dentro de ellos.

NOTA: Se que muchos aqui se sabian esto, para el que se lo sabia pues lo ha repasado y el que no, pues lo ha aprendido.

Saludos desde Rep. Dom. Wink

Posted: 14/12/2006 7:34 por Juan Fco. Berrocal | con 35 comment(s)
Archivado en: ,
Comparte este post:

Comentarios

El Bruno ha opinado:

buena data !!!

aunq yo sacaria el foco en el primer textbox del for porq sino esta instruccion se ejecuta muchas veces ..

Saludos

# December 14, 2006 3:15 PM

Juan Fco. Berrocal ha opinado:

Hola Bruno.

Bueno esa es la intencion de que se ejecute varias veces, es decir, se ejecutara las veces que presiones el boton.

Gracias por leerme Wink

# December 14, 2006 3:49 PM

Romny ha opinado:

Esta bueno el dato

# December 14, 2006 4:01 PM

El Bruno ha opinado:

y porq no hacerlo de la siguiente manera

//Limpiar de manera rapida

foreach (Control c in this.Controls)

{

 if (c is TextBox)

 {

   c.Text = "";

 }

}

//Enfoco en el primer TextBox

this.textBox1.Focus();

en cada iteracion solo limpias el control, y luego pones el foco en el primero, sino en cada iteracion realizas 2 acciones y una de ellas (me parece) no es necesaria ...

pero puede q me equivoque :D

Saludos

# December 14, 2006 4:12 PM

Augusto Ruiz ha opinado:

Esto tiene un pequeño problema. En el momento en el que en el formulario tengas un contenedor - como un panel - con textboxes, éstos no se limpiarán...

Yo haría lo siguiente:

private void btnLimpiar_Click(object sender, EventArgs e)

{

  limpiarTextBoxes(this);

  // Y opcionalmente...

  this.textBox1.Focus();

}

private void limpiarTextBoxes(Control parent)

{

   //Limpiar de manera rapida

   foreach (Control c in parent.Controls)

   {

       if (c is TextBox)

       {

           c.Text = "";

       }

       if (c.Controls.Count > 0)

       {

           limpiarTextBoxes(c);

       }

   }

}

# December 14, 2006 4:26 PM

PabloNetrix ha opinado:

Tu solución es la buena Bruno... bueno ahora vendrá Juan Fco y dirá: -¡Ah! ¿Cómo? ¡¡Pero si yo había puesto lo del Focus DESPUES de cerrar la llave!!

(seguro que por eso no entendió lo que le comentaste en el primer reply ;) )

Saludos

# December 14, 2006 4:29 PM

Juan Fco. Berrocal ha opinado:

Bueno...

Lo que Bruno expone tiene sentido no he dicho que no, se podria hacer de esa manera, aunque la solucion que expone Augusto esta muy buena, porque hay mayor control.

Saludos.

# December 14, 2006 5:00 PM

PabloNetrix ha opinado:

Bueno que conste que Augusto posteó miestras yo estaba respondiendo... no estoy menospreciando su solución ni nada de eso. :P

De hecho es un buen ejemplo, de hecho uno de los clásicos, de recursividad.

Saludos

# December 14, 2006 5:44 PM

Sergio Tarrillo's Blog -> enhancements ha opinado:

leyendo el post de JuanFco, Limpiar informacion de los controles (TextBox's) Rapidamente, y debido a...

# December 14, 2006 8:01 PM

SergioTarrillo's Blog ha opinado:

leyendo el post de JuanFco , Limpiar informacion de los controles (TextBox's) Rapidamente , y debido

# December 14, 2006 8:01 PM

Augusto Ruiz ha opinado:

Tranquilo Pablo, que no pasa naaa ;)

De todas formas, la solución propuesta está bien si hace lo que necesitas. Si no, pues no :)

# December 15, 2006 9:49 AM

Pika-pika... Chuuuu ha opinado:

Iba a contestar en un comentario a este post del blog de Juan Fco. Berrocal en el que se comenta cómo

# December 15, 2006 12:52 PM

Felipe ha opinado:

Estas discusiones y colaboración es lo que ayuda a que cada uno de los programadores mejoren cada dia y las aplicaciones sean mas rápidas... me parece que con este material se debe implementar una clase para validaciones y  acciones rutinarias como limpieza de controles en la cual nos despreocupemos de hacer esto nuevamente.

Esta clase la implementare en mis nuevos proyectos e inicialmente tendría dos métodos uno con contenedores y otro sin ellos.

Muchas gracias por estos aportes y si piensan que se podría  hacer de una forma mas eficiente me gustaría leer sus comentarios.

# December 16, 2006 5:01 PM

Arismonty Beato ha opinado:

Primero que nada...Felicitaciones a JuanFco por escribir en Geeks.ms y la motivacion que obtenemos de  su dedicacion a estos temas.

Estoy de acuerdo con el ultimo codigo de Augusto, sin embargo, considero que el foco en el primer textbox asume que ese control se llama 'TextBox1'. Una mejor manera seria:

...

// Encontrar el primer TextBox y activar el focus

int ctrl = 0;

Control c;

while(true)

{

c = this.Controls.Items(ctrl);

if (c is TextBox)

  {

  c.Focus();

  break;

  }

else

  ctrl++;

}

# December 28, 2006 12:09 AM

Juan Fco. Berrocal ha opinado:

Gracias Arismonty, no sabia que leias este blog, gracias mi hermano Wink.

# January 3, 2007 1:35 PM

Elvis ha opinado:

Saben la logica que le ponen tal vez para una aplicacion simple sea una solución pero si se dan cuenta ustedes solo pones this.Controls o me.Controls en su for o foreach pero que pasa si en el formularios ha N Contenedoras y dentro de esos otros contenedores es mas y dentro de esos contenedores hay muchso mas controles entoces ya no funcionaria su this.Controls o me.Controls en su for o foreach por que los controles se encuentra dentro de los contenedores y dime que limpiarias con ese metodo que estas aplicando tal vez limpiarias los texbox u otros pero que pasarian con los texbox que se encuentran en los contenedores .....  hay alguien q tenga la solucion ?

# November 4, 2007 8:30 PM

Lenin ha opinado:

Saludos,

Felicitaciones por la nota. Un favor, perdón el abuso, cómo puedo hacer funcionar en Asp.Net?

Probé esta rutina pero tengo el siguiente mensaje

en c.Text = ""

"System.Web.UI.WebControls.WebControl no contiene un a definición para Text"

Anticipo mi agradecimiento por su ayuda.

Saludos

Lenin

# July 23, 2008 12:00 AM

Idalia Solis ha opinado:

Hola buenas tardes ejecuto su código Sr. Augusto Ruiz y si funciona pero en pantalla los textbox siguen llenos, uso visual studio 2003, asp.net

# July 29, 2008 12:07 AM

Ronald ha opinado:

Ahi tenemos otro modo de hacer lo mismo.

Solo es cuestion de llamar al método y enviarle como parametro el formulario o panel, en fin.... espero que sea util

      /// <summary>

      /// limpia todos los textBoxes de un control (Por ejemplo de un formulario, panel, entre otros)

      /// </summary>

      /// <param name="Control"> es el control que contiene los textBox a limpiar</param>

      public void tbxClearText(Control control)

      {

          Control.ControlCollection Cc = control.Controls;

          for (int i = 0; i < Cc.Count; i++)

          {

              if (Cc[i].Controls.Count > 0)

              {

                  tbxClearText(Cc[i]);//se hace recursivo mientras un control tenga mas subcontroles(ejm: los panel dentro de un formulario)

              }

              else

              {

                  if(Cc[i] is TextBox)

                  {

                      Cc[i].Text = "";

                  }

              }

          }

      }

# July 31, 2008 5:31 PM

Jessy ha opinado:

No sirve el codigo :(

# January 22, 2009 6:59 PM

juan m. ha opinado:

no funciona en asp.net

# February 13, 2009 3:28 AM

Rodrigo ha opinado:

No me funca me dice que c.text no existe o si me falta alguna directiva using.

estas son las que tengo :

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Data.SqlClient;

# April 1, 2009 5:23 PM

Ignacio Morales ha opinado:

 private void limpiarTextBoxes(Control parent)

       {

           //Limpiar de manera rapida

           foreach (Control c in parent.Controls)

           {

               if (c is TextBox)

               {

                   TextBox txt = (TextBox)c;

                   txt.Text = "";

               }

               if (c.Controls.Count > 0)

               {

                   limpiarTextBoxes(c);

               }

           }

       }

# May 27, 2009 3:35 PM

Ignacio Morales ha opinado:

protected void cmdCancelar_Click(object sender, EventArgs e)

       {

           limpiarTextBoxes(this);

       }

# May 27, 2009 3:36 PM

luis ha opinado:

y para wpf-c# como seria

# July 21, 2009 10:15 PM

luis ha opinado:

por favor alguien podria responder

# August 9, 2009 7:06 PM

Samuel ha opinado:

ESTA EXCELENTE ESTE CODIGO PARA WINDOWS FORMS, PERO QUE PASA CON WPF, YA QUE NO EXISTE CONTROLS, Y MARCARA ERROR EN EL FOREACH

saludos

# September 28, 2009 8:50 PM

Jorge Tapia ha opinado:

Ignacio Morales, tu codigo funciona de maravilla lo aplique para limpiar cajas de texto contenidas en un tab y todo fue de maravilla,

A todos Gracias por sus aportes..

Saludos...

# January 20, 2010 1:50 AM

jhonatan ha opinado:

quisiera saber como hacerlo en visual basic pero exactamente para borrar los textbox en tiempo de ejecucion

# April 21, 2010 12:32 AM

Veronica ha opinado:

¡Excelente!

# December 4, 2010 7:57 PM

bolivar ha opinado:

Yo quiero limpiar pero usando una clase de tal manera que yo pueda llamar el la funcion, metodo o lo que sea, desde cualquier formulario y asi no tener que volver a escribir la misma programacion para cada formulario que vaya creando

# March 2, 2011 8:13 AM

Leo ha opinado:

           TextBox temp;

           foreach (Control cont in Panel.Controls)

               if (cont is TextBox)

               {

                   temp = (TextBox)cont;

                   temp.ReadOnly = true;

               }

# June 2, 2011 9:38 PM

vely_2 ha opinado:

por fin encontre algo bueno..

mi problema es que quiero habilitar unos textBox con un boton, de acuerdo a la cantidad que yo le indique dentro de otro textBox para posteriormente hacer unos calgulos que yo necesite..

# February 24, 2012 5:42 PM

vely_2 ha opinado:

lo que quiero hacer es esto:

tengo en total 15 textBox desabilitadas y 15 label desabilitados

al darle que me habilite 10 me debe habilitar 10 textBox y 10 label para posteriormete

hacer una operacion

por decir

en la textBox tengo le pongo un 2 y en el label tengo un 5 me los va a muntiplicar ..

esto lo va haciendo por los 10 que tengo habilitados y al final me realizara una suma de estos..

alguin me puede ayudar??

# February 24, 2012 5:49 PM

vely_2 ha opinado:

el codigo de Ronald creo que me podria servir pero no se como pasarle ese parametro Control control cuando me lo pide.

public void tbxClearText(Control control)

# February 24, 2012 5:54 PM