输入文本后,验证文本框不会清空标签并隐藏标签

时间:2017-03-12 03:06:41

标签: c# winforms validation

我有一个简单的库存应用程序,我正在努力帮助自己学习C#。我有一个注册Windows窗体,它将用户添加到数据库,以便他们可以登录到该应用程序。有用。但是我现在正在努力添加一些文本框验证。我有三个文本框,如果它们是空的,它们会在它们旁边填充标签。但是,我无法弄清楚如何在输入文本后将标签设为null或隐藏。有什么建议吗?

这是我在createButton_Click方法上的代码:

 private void createButton_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|FAMDatabase.accdb");
        OleDbCommand fcmd = new OleDbCommand("INSERT INTO Login([UserName],[Password])" + "values(@username,@password)", con);
        fcmd.Parameters.AddWithValue("@username", newUserTextBox.Text);
        fcmd.Parameters.AddWithValue("@password", newPasswordTextBox.Text);

        if (string.IsNullOrEmpty(newUserTextBox.Text))
        {
            reqName.Text = ("Please enter a User Name");
        }
        if (string.IsNullOrEmpty(newPasswordTextBox.Text))
        {
            reqPW.Text = ("Please enter a Password");
        }
        else if (newPasswordTextBox.Text != newPasswordTextBox2.Text)
        {
            reqPW2.Text = ("Passwords Do Not Match");
        }
        else
        {
            con.Open();
            int i = fcmd.ExecuteNonQuery();
            con.Close();
            MessageBox.Show(
                "User Successfully Created",
                "",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information,
                MessageBoxDefaultButton.Button1);
            this.Close();
        }
    }

2 个答案:

答案 0 :(得分:1)

您可以使用css属性visiblity: hidden;,css属性display: none;,或者只需将文本更改为空字符串。

答案 1 :(得分:1)

我不确定我是否关注你的评论:

  

我无法弄清楚如何在输入文字后将标签设为空或隐藏

使标签为空可能,但要隐藏标签,您只需将标签文本设置为空字符串即可。示例:reqName.Text = "";

您可以在用户按下创建按钮后设置标签,这似乎是发布的代码正在执行的操作。但是,如果您希望在用户键入文本框时隐藏/显示这些标签,但在用户按下创建按钮之前,则需要为每个文本框设置一些事件,以便在用户完成后进行相应的标签更改输入其中一个文本框。一个方便的事件是每个文本框的TextChanged事件。文本更改后,您可以为该文本框设置适当的标签。

使用这个,我建议的另一件事是不要将用户验证与插入数据库混合。示例:在按钮单击方法的开头,设置要使用尚未验证的值插入数据库的参数。如果任何文本框文本无效,则不需要这样做。因此,将此用户验证与插入数据库分开将使事情变得更容易和更合理。

下面是一个方法ValidUserInput,用于检查用户输入的有效性,如果数据有效则返回true,否则返回false。该方法还返回一个字符串消息,以指示数据无效时的问题。然后在按钮单击事件中,您可以检查有效性,如果有效,则将其添加到数据库。我注释掉了添加到数据库,因为它似乎可能对你有用。我还添加了一个结果标签,以指示如果用户输入无效,问题是什么。

三个事件用于在用户输入时更新标签。两个辅助方法:ClearLabelsSetLabels用于清除和设置表单上的标签。希望这会有所帮助。

public Form1() {
  InitializeComponent();
  ClearLabels();
  SetLabels();
}

private void createButton_Click(object sender, EventArgs e) {
  string statusString = "";

  if (!ValidUserInput(out statusString)) {
    lblStatus.Text = statusString;
  }
  else {
    ///OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|FAMDatabase.accdb");
    //OleDbCommand fcmd = new OleDbCommand("INSERT INTO Login([UserName],[Password])" + "values(@username,@password)", con);
    //fcmd.Parameters.AddWithValue("@username", newUserTextBox.Text);
    //fcmd.Parameters.AddWithValue("@password", newPasswordTextBox.Text);
    //con.Open();
    //int i = fcmd.ExecuteNonQuery();
    //con.Close();
    MessageBox.Show("User Successfully Created","", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    //this.Close();
  }
}

private bool ValidUserInput(out string message) {
  ClearLabels();
  if (string.IsNullOrEmpty(newUserTextBox.Text)) {
    reqName.Text = ("Please enter a User Name");
    message = "UserName can not be blank!";
    return false;
  }
  if (string.IsNullOrEmpty(newPasswordTextBox.Text)) {
    reqPW.Text = ("Please enter a Password");
    message = "Password can not be blank!";
    return false;
  }
  if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) {
    reqPW2.Text = ("Please enter a Password ");
    message = "Password verification can not be blank!";
    return false;
  }
  if (newPasswordTextBox.Text != newPasswordTextBox2.Text) {
    reqPW.Text = ("Passwords Do Not Match");
    reqPW2.Text = ("Passwords Do Not Match");
    message = "Password must match!";
    return false;
  }
  message = "Valid User Input";
  return true;
}

private void ClearLabels() {
  reqName.Text = "";
  reqPW.Text = "";
  reqPW2.Text = "";
  lblStatus.Text = "";
}

private void SetLabels() {
  ClearLabels();
  if (string.IsNullOrEmpty(newUserTextBox.Text)) {
    reqName.Text = "Please enter a User Name";
  }
  if (string.IsNullOrEmpty(newPasswordTextBox.Text)) {
    reqPW.Text = "Please enter a Password";
  }
  if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) {
    reqPW2.Text = "Please enter a Password";
  }
  lblStatus.Text = "Enter userName and password";
}

private void newUserTextBox_TextChanged(object sender, EventArgs e) {
  if (string.IsNullOrEmpty(newUserTextBox.Text)) {
    reqName.Text = "Please enter a User Name";
  }
  else {
    reqName.Text = "";
  }
}

private void newPasswordTextBox_TextChanged(object sender, EventArgs e) {
  if (string.IsNullOrEmpty(newPasswordTextBox.Text)) {
    reqPW.Text = "Please enter a Password";
  } else {
    reqPW.Text = "";
  }
}

private void newPasswordTextBox2_TextChanged(object sender, EventArgs e) {
  if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) {
    reqPW2.Text = "Please enter a Password";
  } else {
    reqPW2.Text = "";
  }
}