2017-07-06 42 views
1

Ich habe zwei Textfelder, die beim Laden dynamisch erstellt erstellt werden. Der Benutzer kann auf die Schaltfläche Hinzufügen klicken, die der Benutzeroberfläche jedes Mal zwei neue Textfelder hinzufügt. Wenn diese Textfelder hinzugefügt werden, werden sie auch einer Liste hinzugefügt. Ich versuche, meinem Projekt eine Fehlerbehandlung hinzuzufügen, um sicherzustellen, dass jedes Textfeld ausgefüllt ist, bevor der Benutzer auf "Speichern" klicken kann. Wenn die Textfelder leer sind, sollte ein Meldungsfeld angezeigt werden: Bitte füllen Sie alle Nachrichtenfelder aus. Wenn die Textfelder ausgefüllt sind, sollte ein Meldungsfeld angezeigt werden: Sind Sie sicher, dass Sie diese Änderung vornehmen möchten? Wenn der Benutzer auf Ja klickt, sollten die Änderungen gespeichert werden und das Meldungsfeld "Änderungen gespeichert" sollte anzeigen Wenn der Benutzer auf Nein klickt, sollte das Meldungsfeld verschwinden und die Änderungen nicht gespeichert werden. Die Meldungsfelder sind nicht die Art und Weise handeln I Hier erwarten ist, was ich habe, so weit:C# Winforms Fehlerbehandlung für dynamisch erstellte Textfelder

die Textfelder erstellen:

private void ADDUserInfo(int rowCount, string password = "", string username = "") 
      var Password = new TextBox(); 
      Password.Text = password; 
      Password.Name = "Password" + rowCount; 

      var Username = new TextBox(); 
      Username.Text = username; 
      Username.Name = "Username" + rowCount; 

      CaeUsersPanel.Controls.Add(Username); 
      CaeUsersPanel.Controls.Add(Password); 

      UsernameTextBoxes.Add(Username); 
      PasswordTextboxes.Add(Password); 
      } 

Globale Deklaration der Listen der Textfelder:

List<TextBox> UsernameTextBoxes = new List<TextBox>(); 
List<TextBox> AliasTextBoxes = new List<TextBox>(); 
List<TextBox> PasswordTextboxes = new List<TextBox>(); 

die Schaltfläche speichern:

for (int i = 0; i < UsernameTextBoxes.Count; i++) 
      { 
       var userName = UsernameTextBoxes[i]; 
       var password = PasswordTextboxes[i]; 
       _config.Environment.Users.User.Add(new EnvironmentUsersUser() { alias = aliasName.Text, userName = userName.Text, password = password.text, toDisplay = true }); 

      } 

      configmgr.Serilize<Config>(_configurationTabData._objectSources.getEnviromentFileName, _config); 


      for (int i = 0; i < UsernameTextBoxes.Count; i++) 
      { 
       var userName = UsernameTextBoxes[i]; 
       var password = PasswordTextboxes[i]; 
       if (aliasName.Text == "" || userName.Text == "" || password.Text == "") 
       { 
        MessageBox.Show("All fields are required!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
       } 
       else 
       { 
        DialogResult result = MessageBox.Show("Are you sure you want to make these changes", "Warning", MessageBoxButtons.YesNo); 
      if (result == DialogResult.Yes) 
      { 
       configmgr.Serilize<Config>(_configurationTabData._objectSources.getEnviromentFileName, _config); 
       MessageBox.Show("Changes Saved") 
      } 
      } 

      } 

Antwort

1

Vielleicht so etwas mit LinQ?

if(UsernameTextBoxes.TrueForAll(t => t.Text.Length > 0) && 
    AliasTextBoxes.TrueForAll(t => t.Text.Length > 0) && 
    PasswordTextboxes.TrueForAll(t => t.Text.Length > 0)) 
{ 
    //Do stuff when everything is filled 
} 
else 
{ 
    //Do stuff when one or more is empty 
} 

Sie könnten Ihre TextBoxen in eine Klasse gruppieren und diese Klasse prüfen lassen, ob alleDinge gefüllt sind. Dann würden Sie nur eine List mit dieser Klasse als generische benötigen.

+0

das hat funktioniert, danke! – GFDSRFV

+1

'Enumerable.All' ist eine generische und machen das gleiche mit diesem Prädikat –

+0

@Aleks Andreev gleichen Code, aber weniger Overhead in diesem Fall, aber Sie haben Recht. –

Verwandte Themen