2014-09-12 21 views
5

Bilgileri hızlı eklemek için kullandığım kısa pencereler programım var. Ama şimdi onu geliştirmeye çalışıyorum. Boş metin kutularını kontrol etmek için daha verimli bir istek mi arıyorsunuz ve kutu hangisinin olduğunu bulmak için boşsa ve odağı yalnızca bu kutuya geri döndürdüyse. Şu anda hepsinden geçiyorum ve sadece bir mesaj görüntülüyse herhangi bir kutunun boş olup olmadığını kontrol et. Ama hangi kutunun eksik metne baktığını görmeliyiz. İşte kod:Hangi metin kutusunun boş olduğunu bulma

bool txtCompleted = true; 
string errorMessage = "One or more items were missing from the form"; 
foreach(Control c in Controls) 
{ 
    if (c is TextBox) 
    { 
     if (String.IsNullOrEmpty(c.Text)) 
     { 
      txtCompleted = false;       
     } 
    } 
} 
if (txtCompleted == false) 
{ 
    MessageBox.Show(errorMessage); 
} 
+0

sizin de kullanabilirsiniz örneğin bir TextBox kontrol etmek istiyorsanız 'gönderen' özelliği bunun gibi ((System.Web.UI.WebControls.TextBox) gönderen) .Items.Clear(); ' – MethodMan

cevap

2

Odak noktanızdaki kontrole odaklanın ve ardından bittiğinde mola verin.

foreach(Control c in Controls) 
    { 
     if (c is TextBox) 
     { 
      if (String.IsNullOrEmpty(c.Text)) 
      { 
       txtCompleted = false; 
       c.Focus(); 
       MessageBox.Show(errorMessage); 
       break; 
      } 
     } 
    } 
+1

Sorunun 'Focus' ile ilgili olduğunu sanıyordum, ancak OP sadece şu anki kodunu ** yükseltmek istiyor. –

+1

Bu, boş metin kutuları olmadığında, her denetimden geçmez. Bir tane bulunur olmaz, durur. Onun koduna göre, tüm bunlara rağmen. Linq, istediği olanları iade etmek için tüm kontrollerden geçmeli, böylece işleme kadar verimli. Linq kod satırlarında daha verimlidir. –

+0

@CyberneticTwerkGuruOrc başlıkta ayrıca OP'nin boş metin kutusunu bulmak istediği belirtiliyor. Buna bağlı olarak, sadece geliştirmeyle ilgili değil (şu anki kodu herhangi bir şeyi "bulmadığı için)" – Default

6

foreach kullanarak Kişisel yaklaşım bana umut verici görünüyor. LINQ kullanabilirsiniz Howver yanı

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)) { 
    ... 
} 

Sen boş metin kutusuna odağı ayarlamak için focus() yöntemi kullanabilirsiniz.

+1

LINQ ana olduğunda, C# sahip olursunuz. Güzel çözüm! –

1

Eğer R.T. hediye olarak hemen hemen aynı çözümü kullanmak boş metin kutusu bir başvuru olsun, ancak bunun yerine FirstOrDefault kullanmak için:

var emptyTextBox = Controls.OfType<TextBox>().FirstOrDefault(t => string.IsNullOrEmpty(t.Text) 
if (emptyTextBox != null) 
{ 
    // there is a textbox that has no Text set 
    // set focus, present error message etc. on emptyTextBox 
} 
İlgili konular