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. [;)]
buena data !!!
aunq yo sacaria el foco en el primer textbox del for porq sino esta instruccion se ejecuta muchas veces ..
Saludos
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 [;)]
Esta bueno el dato
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 😀
Saludos
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);
}
}
}
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
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.
Bueno que conste que Augusto posteó miestras yo estaba respondiendo… no estoy menospreciando su solución ni nada de eso. 😛
De hecho es un buen ejemplo, de hecho uno de los clásicos, de recursividad.
Saludos
leyendo el post de JuanFco, Limpiar informacion de los controles (TextBox’s) Rapidamente, y debido a…
leyendo el post de JuanFco , Limpiar informacion de los controles (TextBox’s) Rapidamente , y debido
Tranquilo Pablo, que no pasa naaa 😉
De todas formas, la solución propuesta está bien si hace lo que necesitas. Si no, pues no 🙂
Iba a contestar en un comentario a este post del blog de Juan Fco. Berrocal en el que se comenta cómo
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.
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++;
}
Gracias Arismonty, no sabia que leias este blog, gracias mi hermano [;)].
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 ?
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
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
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
///
///
/// es el control que contiene los textBox a limpiar
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 = «»;
}
}
}
}
No sirve el codigo 🙁
no funciona en asp.net
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;
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);
}
}
}
protected void cmdCancelar_Click(object sender, EventArgs e)
{
limpiarTextBoxes(this);
}
y para wpf-c# como seria
por favor alguien podria responder
ESTA EXCELENTE ESTE CODIGO PARA WINDOWS FORMS, PERO QUE PASA CON WPF, YA QUE NO EXISTE CONTROLS, Y MARCARA ERROR EN EL FOREACH
saludos
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…
quisiera saber como hacerlo en visual basic pero exactamente para borrar los textbox en tiempo de ejecucion
¡Excelente!
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
TextBox temp;
foreach (Control cont in Panel.Controls)
if (cont is TextBox)
{
temp = (TextBox)cont;
temp.ReadOnly = true;
}
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..
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??
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)