Azzerare le TextBox presenti nella Form con un unico comando

Per azzerare tutti i controlli di tipo TextBox presenti in un Form in una unica passata si può utilizzare un metodo ricorsivo:
Richiamo del metodo:

Vb.NET
ClearTextBoxes(Me)
Private Sub ClearTextBoxes(ByVal ctl As Control)

      ' da notare l'utilizzo di TryCast che corrisponde grossomodo al comando

      ' as di C#

      Dim tb As TextBox = TryCast(ctl, TextBox)                

      If tb IsNot Nothing Then

            tb.Text = [String].Empty

ElseIf ctl.Controls.Count > 0 Then

            For k As Integer = 0 To ctl.Controls.Count - 1

                 ClearTextBoxes(ctl.Controls(k)) 'ricorsione

            Next

      End If

End Sub

C#
ClearTextBoxes (this);
void ClearTextBoxes(Control ctl)
{

      // da notare l'utilizzo di as in c#

      // che indica letteralmente:

      // prova a generare un oggetto di tipo "as"

      // se non ce la fai non dare errore ma restituisci un oggetto nullo

      TextBox tb = ctl as TextBox;

      if (tb != null)

            tb.Text = String.Empty;

      else if(ctl.Controls.Count > 0)

      {

            for (int k = 0; k < ctl.Controls.Count; k++)

                 ClearTextBoxes(ctl.Controls[k]); // ricorsione

      }

}

Print | posted on sabato 26 agosto 2006 18:11

Feedback

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by imperugo at 29/08/2006 13:28
Gravatar Ma non fai prima con una roba del genere

for (int i = 0; i < Controls.Count; i++)
{
if (Controls[i] is TextBox)
{
Controls[i].Text = String.Empty;
}
}

Non hai ricorsione, non crei nuovi oggetti Textbox e se togli e graffe sono 3 righe di codice :D

Occhio che l'ho scritta al volo, magari ho dimenticato qualche cast o errori di punteggiatura.

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Luciano Bastianello at 29/08/2006 13:41
Gravatar Prova a mettere sulla form un controllo "contenitore" come ad esempio un groupbox e poi su questo metti i texbox, prova il tuo codice, ti accorgerai che vengono azzerati solo i controlli inseriti direttamente nella form.
Questo perchè gli oggetti contenitore hanno a loro volta una collection "controls" collegata, se non scorri ricorsivamente tutte le collection non ottieni pertanto nessun risultato.
Anche quando dici i "non crei nuovi oggetti" sei in errore in quanto sul mio suggerimento non c'è la creazione di oggetti ma un cast di oggetti già esistenti in altri, con "new" tra l'altro avresti la creazione di una nuovo textbox e non la gestione del textbox presente a video.

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Etzel at 01/09/2006 18:38
Gravatar Private Sub PulisciTxtBox(ByVal CtrlParent As Control)
Dim ctrl As Control
For Each ctrl In CtrlParent.Controls

If ctrl.HasChildren Then
AddEvents(ctrl)
End If
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
End If
Next
End Sub

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Luciano Bastianello at 01/09/2006 19:50
Gravatar A prima vista, ad occhio potrebbe funzionare a patto che "AddEvents(ctrl)" sia sostituita con "PulisciTxtBox(ctrl)"

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Etzel at 05/09/2006 13:26
Gravatar si scusate :-[ ...
mi sono simenticato di rinominare la chimata ricorsiva
la procedura iniziale era nata per gli eventi di tutti i componenti di una form ( o contenitore ) a delle funzioni :-[

mi bacchetto le mani da solo :-[

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by chry at 20/09/2006 01:47
Gravatar Immagino che quando si richiama ClearTextBoxes bisogna metterci come argomento la collection di textbox.

In caso affermativo, come si fa a crearla?

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Luciano Bastianello at 20/09/2006 01:58
Gravatar Non è necessario individuare la collection che contiene le textbox perchè la chiamata è ricorsiva e quindi si spazzola tutte le collection di controlli presenti nella form.
Se si vuole iniziare dalla radice è ovviamente necessario passare la classe / form come parametro.

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by chry at 20/09/2006 02:14
Gravatar Mai avuto occasione di passare tutta la classe (o form): come si fa?

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Luciano Bastianello at 20/09/2006 02:33
Gravatar Se tu avessi letto con attenzione l'esempio avresti potuto notare la riga:
ClearTextBoxes(Me)
Che è la chiamata al metodo con il passaggio della classe / form corrente
Un proverbio indiano dice:
Ti posso indicare dov'è il fiume ma non obbligarti a bere!

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by chry at 20/09/2006 02:52
Gravatar Eh, mai usato solo il "me", ma gli facevo seguire sempre il punto e poi sceglievo una voce dall'intellisense.

Grazie per l'aiuto.

P.S.: giusto il proverbio, ma se uno s'impegna a cercare il fiume e non lo trova sarebbe gentile prenderlo per mano ed accompagnarlo.

# Ciclo sul form - MasterDrive.it

Left by Pingback/TrackBack at 07/06/2007 00:49
Gravatar Ciclo sul form - MasterDrive.it

# Textbox generiche - MasterDrive.it - Information Technology Developers Community

Left by Pingback/TrackBack at 13/07/2007 23:29
Gravatar Textbox generiche - MasterDrive.it - Information Technology Developers Community

# [vb2005EE] Conoscere il tipo di un controllo - MasterDrive.it - Information Technology Developers Community

Left by Pingback/TrackBack at 09/08/2007 17:47
Gravatar [vb2005EE] Conoscere il tipo di un controllo - MasterDrive.it - Information Technology Developers Community

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Giacomo at 10/04/2008 11:45
Gravatar Ciao Luciano,
Ho provato il codice e finalmente funziona, ho visto che posso mettere direttamente il form principale e mi svuota tutto, oppure se voglio svuotare solo gli oggetti contenuti in un pannello passo come parametro me.oggetto e svuota solo quelli.
Grande... funziona!
E' possibile avera la stessa cosa anche per le ComboBox ?
Giacomo

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Luciano Bastianello at 10/04/2008 11:55
Gravatar Lo puoi fare per qualsiasi controllo che abbia la proprietà text
Devi ovviamente fare un altro trycast (vb.net) o definire un altro "as" (c#)

# re: Azzerare le TextBox presenti nella Form con un unico comando

Left by Giacomo at 10/04/2008 12:03
Gravatar Ciao Luciano,
ci sono riuscito anche con gli oggetti con altre proprietà tipo la ComboBox sulla proprietà .SelectedIndex, creando un'altra funzione quasi identica.
Guarda sotto:

Public Sub ClearComboBox(ByVal ctl As Control)

' da notare l'utilizzo di TryCast che corrisponde grossomodo al
' comando as di C#

Dim tb As ComboBox = TryCast(ctl, ComboBox)
If tb IsNot Nothing Then
tb.SelectedIndex = -1
ElseIf ctl.Controls.Count > 0 Then
For k As Integer = 0 To ctl.Controls.Count - 1
ClearComboBox(ctl.Controls(k)) ' ricorsione
Next
End If

End Sub

# Problemi con Array - MasterDrive.it - Information Technology Developers Community

Left by Pingback/TrackBack at 30/04/2008 14:58
Gravatar Problemi con Array - MasterDrive.it - Information Technology Developers Community

Your comment:





 
Please add 7 and 2 and type the answer here:

Copyright © Luciano Bastianello

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski