动态创建文本框的C#Winforms错误处理

动态创建文本框的C#Winforms错误处理,c#,winforms,error-handling,C#,Winforms,Error Handling,我有两个在加载时动态创建的文本框。用户可以单击添加按钮,每次向界面添加两个新文本框。添加这些文本框时,它们也会添加到列表中。我正在尝试将错误处理添加到我的项目中,以确保在用户单击“保存”之前填写好每个文本框。如果文本框为空,则消息框应显示:请填写所有消息框。 如果文本框已填写,则消息框应显示:您确定要进行此更改吗? 如果用户单击“是”,则应保存更改,并显示消息框“更改已保存” 如果用户单击“否”,则消息框将消失,并且更改不会保存。 消息框的运行方式与我预期的不同 以下是我到目前为止的情况: 创建

我有两个在加载时动态创建的文本框。用户可以单击添加按钮,每次向界面添加两个新文本框。添加这些文本框时,它们也会添加到列表中。我正在尝试将错误处理添加到我的项目中,以确保在用户单击“保存”之前填写好每个文本框。如果文本框为空,则消息框应显示:请填写所有消息框。 如果文本框已填写,则消息框应显示:您确定要进行此更改吗? 如果用户单击“是”,则应保存更改,并显示消息框“更改已保存” 如果用户单击“否”,则消息框将消失,并且更改不会保存。 消息框的运行方式与我预期的不同 以下是我到目前为止的情况:

创建文本框:

 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>();
List UsernameTextBoxes=newlist();
列表别名文本框=新列表();
List passwordtextboxs=新列表();
保存按钮:

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

            }
for(int i=0;i
使用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 
}

您可能希望将文本框分组到一个类中,并让该类检查是否所有内容都已填充。然后你只需要一个
列表
,这个类是泛型的。

可枚举的。All
是一个更泛型的类,对这个类也一样predicate@AleksAndreev编写了相同的代码,但在本例中开销较小,但您是对的。