在调用 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);
    }
}