如何在Windows窗体中添加TextBox验证

时间:2014-01-08 08:05:51

标签: c# winforms

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace testdb
{
     public partial class AddProject : Form
     {
           public AddProject()
           {
               InitializeComponent();
           }

          private void btn_addproject_Click(object sender, EventArgs e)
          {
              string constr = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:/Users   /Xprts_3/Documents/Database1.accdb";
              string cmdstr = "insert into tb1(name,rollno,projectdate)   (@First,@Last,@pdate)";
              OleDbConnection con = new OleDbConnection(constr);
              OleDbCommand com = new OleDbCommand(cmdstr, con);
              con.Open();
              com.Parameters.AddWithValue("@First", textBox_project_name.Text);
              com.Parameters.AddWithValue("@Last", comboBox1_project_status.Text);
              com.Parameters.AddWithValue("@pdate", dateTimePicker1.Text);
              com.ExecuteNonQuery();
              con.Close();
          }
     }
  }

我在按钮点击时将数据添加到数据库。

现在我想要验证它。如果任何字段为空,我希望向用户显示一条错误消息,而不是将数据插入数据库。如何在Windows窗体中实现这一目标?

9 个答案:

答案 0 :(得分:1)

订阅textBox_project_namecomboBox1_project_statusdateTimePicker1控件的Validating事件。在这些处理程序中,验证控件中的数据,并设置ErrorProvider错误,以便在数据无效时进行适当的控制。

E.g。验证TextBox可能如下所示:

void textBox_project_name_Validating(object sender, CancelEventArgs e)
{
    if (String.IsNullOrEmpty(textBox_project_name.Text))
    {
       e.Cancel = true;
       errorProvider1.SetError(textBox_project_name, "Required");   
    }
    else
    {
       errorProvider1.SetError(textBox_project_name, "");  
    }
}

答案 1 :(得分:1)

  private void btn_addproject_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(textBox_project_name.Text) && !String.IsNullOrEmpty(comboBox1_project_status.Text) && !String.IsNullOrEmpty(dateTimePicker1.Text))
    {
        string constr = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:/Users   /Xprts_3/Documents/Database1.accdb";
        string cmdstr = "insert into tb1(name,rollno,projectdate)   (@First,@Last,@pdate)";
        // 
        OleDbConnection con = new OleDbConnection(constr);
        OleDbCommand com = new OleDbCommand(cmdstr, con);
        con.Open();
        com.Parameters.AddWithValue("@First", textBox_project_name.Text);
        com.Parameters.AddWithValue("@Last", comboBox1_project_status.Text);
        com.Parameters.AddWithValue("@pdate", dateTimePicker1.Text);
        com.ExecuteNonQuery();
        con.Close();
    }
    else
    {
        lblMsg.Text="Enter data";
    }

}

答案 2 :(得分:0)

简单的解决方案是制作标签,以便在出现问题时通知用户。在您的事件处理程序中,您可以根据文本框是否包含文本来更改文本。

对于更高级的解决方案,您可以使用ErrorProvider和数据绑定。

    public partial class AddProject : Form
    {
        public AddProject()
        {
            InitializeComponent();
        }

        private void btn_addproject_Click(object sender, EventArgs e)
        {            
           if(string.isNullOrEmpty(textBox_project_name.Text) ||
           string.isNullOrEmpty(comboBox1_project_status.Text) ||
           string.isNullOrEmpty(dateTimePicker1.Text))
          {  
              errorLabel.Text = "Enter text in all fields";
              return;
          } 
          else
          {
              errorLabel.Text = "";                 
          }

          string constr = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:/Users   /Xprts_3/Documents/Database1.accdb";
          string cmdstr = "insert into tb1(name,rollno,projectdate)   (@First,@Last,@pdate)";

          OleDbConnection con = new OleDbConnection(constr);
          OleDbCommand com = new OleDbCommand(cmdstr, con);
          con.Open();

          com.Parameters.AddWithValue("@First", textBox_project_name.Text);
          com.Parameters.AddWithValue("@Last", comboBox1_project_status.Text);
          com.Parameters.AddWithValue("@pdate", dateTimePicker1.Text);
          com.ExecuteNonQuery();
          con.Close();        
       }
}

答案 3 :(得分:0)

我通常订阅文本框的LostFocus事件,这样每当用户输入另一个文本框并且当前失去焦点时,它应该提示您想要的任何内容。它适用于我的情况。

答案 4 :(得分:0)

首先,您需要以序列的形式获取所有文本框,例如:

var boxes = Controls.OfType<TextBox>();

然后,您可以迭代它们,并相应地设置错误:

foreach (var box in boxes)
{
    if (string.IsNullOrWhiteSpace(box.Text))
    {
        errorProvider1.SetError(box, "Please fill the required field");
    }
}

答案 5 :(得分:0)

如果textBox_project_name.Text,comboBox1_project_status.Text和dateTimePicker1.Text不为null或为空,则必须检查if语句。

这是一种方法。

private void btn_addproject_Click(object sender, EventArgs e)
    {
        if(string.IsNullOrEmpty(textBox_project_name.Text) || 
        string.IsNullOrEmpty(comboBox1_project_status.Text) || 
        string.IsNullOrEmpty(dateTimePicker1.Text)){
            //Display your error 
                     return;
        }


        string constr = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:/Users   /Xprts_3/Documents/Database1.accdb";
        string cmdstr = "insert into tb1(name,rollno,projectdate)   (@First,@Last,@pdate)";
     // 
       OleDbConnection con = new OleDbConnection(constr);
       OleDbCommand com = new OleDbCommand(cmdstr, con);
       con.Open();
       com.Parameters.AddWithValue("@First", textBox_project_name.Text);
       com.Parameters.AddWithValue("@Last", comboBox1_project_status.Text);
       com.Parameters.AddWithValue("@pdate", dateTimePicker1.Text);
         com.ExecuteNonQuery();
        con.Close();


     }

答案 6 :(得分:0)

您可以通过在按钮点击事件中添加以下代码行来验证文本条目....

if (String.IsNullOrEmpty(textBox_project_name.Text))
    {
        Response.Write("<script>alert('Enter project name.')</script>");
    }

    if (String.IsNullOrEmpty(comboBox1_project_status.Text))
    {
        Response.Write("<script>alert('Enter project status.')</script>");
    }

    if (string.IsNullOrEmpty(dateTimePicker1.text))
    {
        Response.Write("<script>alert('Select Proper Date.')</script>");
    }

答案 7 :(得分:0)

您可以在执行db操作之前验证文本框的值。

private void btn_addproject_Click(object sender, EventArgs e)
{
    if (String.IsNullOrEmpty(textBox_project_name.Text) && !String.IsNullOrEmpty(comboBox1_project_status.Text) && !String.IsNullOrEmpty(dateTimePicker1.Text))
    {

        MessageBox.Show("Enter data");
        return;
    }        

    string constr = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:/Users   /Xprts_3/Documents/Database1.accdb";
    string cmdstr = "insert into tb1(name,rollno,projectdate)   (@First,@Last,@pdate)";

    OleDbConnection con = new OleDbConnection(constr);
    OleDbCommand com = new OleDbCommand(cmdstr, con);
    con.Open();
    com.Parameters.AddWithValue("@First", textBox_project_name.Text);
    com.Parameters.AddWithValue("@Last", comboBox1_project_status.Text);
    com.Parameters.AddWithValue("@pdate", dateTimePicker1.Text);
    com.ExecuteNonQuery();
    con.Close();


}

答案 8 :(得分:0)

尽管已有几个答案,但我不喜欢其中任何一个。最好的方法(imho)是允许用户输入错误的数据,但是当他犯了错误时,他会这样做,他会理解自己。通常,在输入数据的表单上,每个字段都会有Label + TextBox(或其他控件)。订阅每个控件OnTextChangedOnValueChanged等),并在输入数据正常时检查。如果不是,请将旁边的标签设置为红色(或者以其他方式给用户提示,哪些数据不正常)。

此外,在插入数据之前,请对所有值进行全面检查,以更积极的方式告知用户他的错误:弹出窗口,将焦点设置为错误值的控件等。

点是:

  • 用户在输入时立即查看数据是否有误(例如,输入double,然后能够立即看到错误的小数点字符将让用户快速点击< kbd> Backspace 并更正它,而如果它只在焦点丢失时显示 - 需要额外的步骤:移回焦点,移动插入符号等),所以OnTextChanged&gt; OnFocusLost(或ValidatingValidated等)。

  • 推送用户逐个输入特定数据是不好的,因为他可能想稍后输入一些东西,这就是为什么做任何积极的事情(显示弹出窗口,设置焦点等)是非常糟糕的令人烦恼的是,这就是为什么你想在用户确认他的输入时通过在填写表格结束时按下Add按钮来做这件事。

  • 你想告诉用户错误的地方和位置,所以盲目地检查价值是否正常,什么都不做是坏事。

  • 通知用户,为什么数据错误(因为用户能够自己解决)是非常重要的,除非你有最小/最大检查,需要特殊值,检查错误字符,检查使用其他内容输入值 - 如果是 - 使用红色突出显示,或提供有关错误的其他信息(使用ErrorProvider,将ToolTip提供给标签等)。你可以很懒,只在最后(按下按钮时)在弹出窗口中执行此操作。

例如:

private void textBoxName_TextChanged(object sender, EventArgs e)
{
    // name length is maximum 10
    labelName.Color = textBoxName.Text.Length > 10 ? Color.Red : SystemColors.WindowText;
}

private void buttonAddProject_Click(object sender, EventArgs e)
{
    // check name
    string name = textBoxName.Text.Trim()
    if(name.Length == 0 || name.Length > 10)
    {
        labelName.Color = Color.Red;
        textBoxName.Focus();
        textBoxName.SelectAll();
        MessageBox.Show("Name is required. Maximum length is 10.");
        return;
    }
    // check something else
    // ... if check fail - focus, messagebox, return
    // ...
    // insert data
    // ...
    DialogResult = DialogResult.Ok; // close form
}