Uygulamada çocuk denetimleri içeren bir grup kutum var. (Eklenen resimde de görüldüğü gibi). Basit bir foreach döngüsünü kullanarak bazı doğrulama yapmak için tüm metin kutularını numaralandırmak istiyorum.Grup kutusunun içindeki Çocuk denetimleri listesini alın
Bu belge anahat
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);
}
}
}
}
}
}
Sorum şu kontrollerin konut adil bir fikir verecek, dahil olmak üzere tüm denetimleri almak için (muhtemelen LINQ aracılığıyla) daha iyi bir yolu var mı paneller içinde yer alan metin kutuları yukarıdaki yönteme göre.
var validData
= grpBxTargetSensitivity.Controls.OfType<FlowLayoutPanel>()
.SelectMany(c => c.Controls.OfType<Panel>())
.SelectMany(c => c.Controls.OfType<TextBox>())
.All(textbox => !string.IsNullOrWhiteSpace(textbox.Text));
Bu grup kutusunda tüm FlowLayoutPanels tüm panellerin içindeki tüm metin kutularının kapmak edeceğiz:
Mükemmel! Bir ton teşekkürler. LINQ'ta bir yol var mı, bazı metin kutularını filtrelemek için yukarıdaki sorguya bir koşul ekleyebilir miyim? –
@ this-Me Tabii ki, LINQ'ın 'Where' maddesini kullanabilirsiniz. En son 'SelectMany() 've' All() 'arasında bir şey deneyin:' .Where (textbox => textbox.Name.StartsWith ("birşey")) ' –