Nella mia applicazione ho una casella di gruppo che contiene controlli figlio. (Come visto nella foto dettagliata). Voglio enumerare tutte le caselle di testo per eseguire alcune convalide utilizzando un semplice ciclo foreach.Ottieni l'elenco di controlli secondari all'interno di una casella di gruppo
Questo schema documento darebbe una giusta idea della custodia dei controlli
foreach (Control control in grpBxTargetSensitivity.Controls)
{
if (control is FlowLayoutPanel && control.HasChildren)
{
foreach (Control ctrl in control.Controls)
{
if (ctrl is Panel && ctrl.HasChildren)
{
foreach (Control tbox in ctrl.Controls)
{
if (tbox is TextBox)
{
TextBox textbox = tbox as TextBox;
validData &= !string.IsNullOrWhiteSpace(textbox.Text);
}
}
}
}
}
}
La mia domanda è: esiste un modo migliore (possibilmente attraverso LINQ) per ottenere tutti i controlli, tra cui le caselle di testo ospitate all'interno dei pannelli rispetto al metodo sopra.?
Perfetto! Grazie mille. C'è un modo in LINQ Posso aggiungere una condizione nella query precedente per filtrare alcune caselle di testo? –
@ this-Me Certo, puoi semplicemente usare la clausola 'Where' di LINQ. Tra l'ultimo 'SelectMany()' e 'All()', prova qualcosa come: '.Where (textbox => textbox.Name.StartsWith (" qualcosa "))' –