2017-07-06 45 views
1

我有两个文本框是在加载时动态创建的。用户可以点击添加按钮,每次添加两个新的文本框到界面。当这些文本框被添加时,它们也被添加到列表中。我正在尝试向我的项目添加错误处理,以确保在用户点击保存之前填写每个文本框。如果文本框为空,则应显示一个消息框:请填写所有消息框。 如果在文本框中填写了一个消息框,应显示:您确定要进行此更改吗? 如果用户单击是,则应保存更改,并且消息框“更改已保存”应显示为 如果用户单击否,则消息框应消失且未保存更改。 该消息框是不演戏我期待 这里的方式是我到目前为止有:C#Winforms动态创建文本框的错误处理

创建文本框:

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); 
      } 

文本框的列表中的全局声明:

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

保存按钮:

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") 
      } 
      } 

      } 

回答

1

也许这样,使用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 
} 

你可能想将你的文本框为一类,使该类检查,如果万物充满。那么你只需要一个List这个类作为通用的。

+0

这工作谢谢你! – GFDSRFV

+1

'Enumerable.All'是一个更通用的,并且与此谓词相同 –

+0

@Aleks Andreev相同的代码,但在这种情况下开销较小,但您是对的。 –