在调用 ShowDialog 之前进行验证
Validating before invoking ShowDialog
我正在使用两种形式,我必须先验证第一种形式的输入,然后才能切换到第二种形式。
我的第一种形式的代码如下:
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
IsValidata();
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
IsValidata() 是一系列验证,用于检查输入是否存在以及是否为字符串。
我尝试将它们放在花括号内,但验证不起作用:
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
我能够加载 form2 的唯一方法是去掉花括号,但逻辑不正确,它不能完全验证我的输入。我错过了什么?
这是我的有效数据的代码:
private bool IsValidata()
{
//validate the First Name textbox
if (!IsPresent(txtFirst, "First Name"))
{
return false;
}
if (!StringValidator(Fname))
{
return false;
}
//validate the Last Name textbox
if (!IsPresent(txtLast, "Last Name"))
{
return false;
}
if (!StringValidator(Lname))
{
return false;
}
return true;
}
您的事件处理程序中缺少一些控制流逻辑。
假设您只想在输入无效时向用户显示一个消息框。否则,如果输入有效,则显示第二种形式。
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
if (IsValidata())
{
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
else
{
// Show a message box, with an OK button only
MessageBox.Show("Invalid Input", "Invalid Input", MessageBoxButtons.OK);
}
}
在上面的例子中,我们:
- 获取输入
- 检查数据是否有效
- 如果数据有效,显示新表格
- 如果数据无效,我们会向用户显示一条消息
如果您想根据验证的结果显示消息(即如果用户只输入数字而不是字符串),您需要添加逻辑,并构造您要显示的消息。
更新:
好的,所以您实际上希望验证例程return 类型 验证失败(如果有任何失败)。
所以让我们定义一个验证方法可以return:
的新类型
public class ValidationResult
{
public bool IsValid { get; set; }
public string UserMessage { get; set; }
}
现在我们可以更新验证方法了:
private ValidationResult IsValidata()
{
//validate the First Name textbox
if (!IsPresent(txtFirst, "First Name"))
{
return new ValidationResult {
IsValid = false,
UserMessage = "Please enter a First Name"
};
}
// rest of valiation rules here,
// setting the UserMessage as appropriate
// If no validation checks fail, then we are valid
return new ValidationResult { IsValid = true };
}
现在您的事件处理程序可以使用结果:
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
var validationResult = IsValidata();
if (validationResult.IsValid)
{
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
else
{
// Show a message box, with an OK button only
MessageBox.Show(validationResult.UserMessage, "Invalid Input", MessageBoxButtons.OK);
}
}
我正在使用两种形式,我必须先验证第一种形式的输入,然后才能切换到第二种形式。
我的第一种形式的代码如下:
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
IsValidata();
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
IsValidata() 是一系列验证,用于检查输入是否存在以及是否为字符串。
我尝试将它们放在花括号内,但验证不起作用:
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
我能够加载 form2 的唯一方法是去掉花括号,但逻辑不正确,它不能完全验证我的输入。我错过了什么?
这是我的有效数据的代码:
private bool IsValidata()
{
//validate the First Name textbox
if (!IsPresent(txtFirst, "First Name"))
{
return false;
}
if (!StringValidator(Fname))
{
return false;
}
//validate the Last Name textbox
if (!IsPresent(txtLast, "Last Name"))
{
return false;
}
if (!StringValidator(Lname))
{
return false;
}
return true;
}
您的事件处理程序中缺少一些控制流逻辑。
假设您只想在输入无效时向用户显示一个消息框。否则,如果输入有效,则显示第二种形式。
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
if (IsValidata())
{
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
else
{
// Show a message box, with an OK button only
MessageBox.Show("Invalid Input", "Invalid Input", MessageBoxButtons.OK);
}
}
在上面的例子中,我们:
- 获取输入
- 检查数据是否有效
- 如果数据有效,显示新表格
- 如果数据无效,我们会向用户显示一条消息
如果您想根据验证的结果显示消息(即如果用户只输入数字而不是字符串),您需要添加逻辑,并构造您要显示的消息。
更新:
好的,所以您实际上希望验证例程return 类型 验证失败(如果有任何失败)。
所以让我们定义一个验证方法可以return:
的新类型public class ValidationResult
{
public bool IsValid { get; set; }
public string UserMessage { get; set; }
}
现在我们可以更新验证方法了:
private ValidationResult IsValidata()
{
//validate the First Name textbox
if (!IsPresent(txtFirst, "First Name"))
{
return new ValidationResult {
IsValid = false,
UserMessage = "Please enter a First Name"
};
}
// rest of valiation rules here,
// setting the UserMessage as appropriate
// If no validation checks fail, then we are valid
return new ValidationResult { IsValid = true };
}
现在您的事件处理程序可以使用结果:
private void btnSignIn_Click(object sender, EventArgs e)
{
GetInputs();
var validationResult = IsValidata();
if (validationResult.IsValid)
{
de.Text = string.Format("Hello! {0} {1} {2}{3} {4} {5})",
Fname, Lname, "(U", Unum1, "-", Unum2);
this.Hide();
de.ShowDialog();
}
else
{
// Show a message box, with an OK button only
MessageBox.Show(validationResult.UserMessage, "Invalid Input", MessageBoxButtons.OK);
}
}