调用ShowDialog之前进行验证

时间:2018-09-25 01:06:58

标签: c# winforms validation 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的唯一方法是取出花括号,但是逻辑不正确,并且不能完全验证我的输入。我想念什么?

2 个答案:

答案 0 :(得分:0)

这是我的有效数据的代​​码:

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

答案 1 :(得分:0)

您在事件处理程序中缺少一些控制流逻辑。

让我们假设如果输入无效,您只是想向用户显示一个消息框。否则,如果输入有效,则显示第二种形式。

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

在上面的示例中,我们:

  • 获取输入
  • 检查数据是否有效
  • 如果数据有效,请显示新表格
  • 如果数据无效,我们会向用户显示一条消息

如果您要基于验证结果显示一条消息(即,如果用户仅输入数字而不是字符串),则需要添加该逻辑并进行构造您要显示的消息。

更新

好,因此您实际上希望验证例程返回失败的验证的类型(如果失败)。

因此,让我们定义一种新类型,验证方法可以返回该类型:

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