Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ricerca dei textbox di un form
Forum - C# / VB.NET - Ricerca dei textbox di un form

Avatar
cuore napoletano (Normal User)
Pro


Messaggi: 96
Iscritto: 03/02/2011

Segnala al moderatore
Postato alle 13:17
Mercoledì, 11/01/2017
Questo topic è stato chiuso dal moderatore

Buongiorno.
ho una domanda riguardo al seguente codice :

        Dim contatore As Integer = 1
        For Each Pulsante As Control In Me.Controls
            If TypeOf Pulsante Is TextBox Then
                Pulsante.Text = contatore
                contatore = contatore + 1
            End If
        Next

Perchè procede dall'ultima texbox fino alla prima e come fare per ottenere l'ordine opposto?
Grazie saluti


Giovanni
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:49
Mercoledì, 11/01/2017
(cià Cumpà)

L'ordine degli elementi contenuti nel Form padre vengono enumerati in un modo diverso
da come si può pensare, Quello che ci inganna è proprio il fatto di avere TextBox1,TextBox2,TextBox3.

Ma in realtà vengono enumerati in
TextBox3,
TextBox2,
TextBox1

E molto semplice, Basta eseguire un cast sull'enumeratore e invertire l'ordine
Con un uso intermedio di Linq si risolve tutto :k:

Chiedo scusa, Ma non me la cavo bene in Vb.net
Preferisco scrivere la soluzione in C# e magari puoi convertire il codice con uno dei tanti servizi
online di CodeConverter

Codice sorgente - presumibilmente C# / VB.NET

  1. //Creo l'enumeratore e ottengo un cast su tutti i controlli del form
  2.  IEnumerable<Control> controls = this.Controls.Cast<Control>();
  3.  
  4.  //Fase 1:  Inverto l'ordine
  5.  controls = controls.Reverse();
  6.  
  7.  //Fase 2: Seleziono e raggruppo tutti gli elementi che sono le TextBox ordinandole
  8.  List<Control> c = controls.GroupBy(x => x.GetType() == typeof(TextBox)).Select(grp => grp.ToList()).FirstOrDefault().ToList();
  9.  
  10. //Semplice prova
  11. MessageBox.Show(c[0].Name);



in questo modo ti risparmi la noia di fare tutto il ciclo per selezionare elemento x elemento
e verificarne il tipo.


PM
Avatar
cuore napoletano (Normal User)
Pro


Messaggi: 96
Iscritto: 03/02/2011

Segnala al moderatore
Postato alle 11:40
Giovedì, 12/01/2017
ciao, forse anche tu di Napoli?
Grazie per la tua risposta.Ho notato che creando controlli a volo viene rispettato l'ordine di inserimento
e quindi farò cosi.
Grazie ancora hai un caffè pagato....:):):)  ciaooo


Giovanni
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:14
Giovedì, 12/01/2017
Si, precisamente di Aversa ;)

Non avevo mi fatto caso che a ruintime l'enumerazione cambiasse.
Ovviamente si impara giorno dopo giorno.

Chiudo, Buon proseguimento.


PM