2012-08-26 14 views
6

Mam 10 pól tekstowych, teraz chcę sprawdzić, czy żaden z nich nie jest pusty po kliknięciu przycisku. Mój kod to:Sprawdzanie poprawności wielu pól tekstowych za pomocą errorprovider

if (TextBox1.Text == "") 
{ 
    errorProvider1.SetError(TextBox1, "Please fill the required field"); 
} 

Czy istnieje jakiś sposób, że mogę sprawdzić wszystkie otaczaniem naraz, zamiast pisać dla każdego człowieka?

+0

To prawie na pewno Windows Forms, a nie asp.net. – Adam

Odpowiedz

20

Tak, jest.

Po pierwsze, trzeba uzyskać wszystkie pola tekstowe w postaci sekwencji, na przykład tak:

var boxes = Controls.OfType<TextBox>(); 

Następnie można iteracyjne nad nimi, i ustaw błąd odpowiednio:

foreach (var box in boxes) 
{ 
    if (string.IsNullOrWhiteSpace(box.Text)) 
    { 
     errorProvider1.SetError(box, "Please fill the required field"); 
    } 
} 

Zalecam użycie zamiast x == "" lub + string.IsNullOrEmpty do zaznaczania pól tekstowych wypełnionych spacjami, tabulacjami itp. Z błędem.

1

nie może być optymalnym rozwiązaniem, ale to też powinno działać

public Form1() 
    { 
     InitializeComponent(); 
     textBox1.Validated += new EventHandler(textBox_Validated); 
     textBox2.Validated += new EventHandler(textBox_Validated); 
     textBox3.Validated += new EventHandler(textBox_Validated); 
     ... 
     textBox10.Validated += new EventHandler(textBox_Validated); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.ValidateChildren(); 
    } 

    public void textBox_Validated(object sender, EventArgs e) 
    { 
     var tb = (TextBox)sender; 
     if(string.IsNullOrEmpty(tb.Text)) 
     { 
      errorProvider1.SetError(tb, "error"); 
     } 
    } 
1

Edycja:

var controls = new [] { tx1, tx2. ...., txt10 }; 
foreach(var control in controls.Where(e => String.IsNullOrEmpty(e.Text)) 
{ 
    errorProvider1.SetError(control, "Please fill the required field"); 
} 
Powiązane problemy