C# 如何在Windows窗体中添加文本框验证

C# 如何在Windows窗体中添加文本框验证,c#,winforms,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 pa

这是我的代码:

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窗体中实现这一点?

订阅
文本框项目名称
组合框1项目状态
日期时间选择器1
控件的事件。在这些处理程序中,验证控件中的数据,并在数据无效时为相应控件设置错误

例如,文本框的验证可以如下所示:

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

simples解决方案是在其上制作一个标签,当/如果出现问题时通知用户。在事件处理程序中,根据文本框是否包含文本来更改文本

对于更高级的解决方案,您可以使用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();        
       }
}

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

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

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

您好,如果textBox\u project\u name.Text、comboBox1\u project\u 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();


     }

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

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>");
    }
if(String.IsNullOrEmpty(textBox\u project\u name.Text))
{
响应。写入(“警报(‘输入项目名称’)”);
}
if(String.IsNullOrEmpty(comboBox1\u project\u status.Text))
{
响应。写入(“警报(‘输入项目状态’)”);
}
if(string.IsNullOrEmpty(dateTimePicker1.text))
{
回复。写(“警报(‘选择正确的日期’)”);
}

您可以在执行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();


}

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

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

重点是:

  • 用户在输入数据后立即查看数据是否错误是很好的(例如,当输入
    double
    时,能够立即看到错误的小数点字符将允许用户快速点击Backspace并更正它,而如果它仅在焦点丢失时显示,则需要其他步骤:向后移动焦点、向后移动插入符号等),因此
    OnTextChanged
    OnFocusLost
    (或
    验证
    验证
    等)

  • 推动用户一个接一个地输入特定数据是不好的,因为他可能想稍后输入一些内容,这就是为什么要做一些攻击性的事情(显示弹出窗口、设置焦点等)这是一件非常糟糕和烦人的事情,这就是为什么当用户在填写表单的最后按下按钮
    Add
    确认其输入时,您要这样做的原因

  • 您想告知用户哪里出了问题,所以盲目地检查值是否不正确,什么都不做是不好的

  • 告知用户数据错误的原因(因为用户可以自己找出原因)通常并不重要,除非您有最小/最大检查、需要特殊值、检查错误字符、使用其他内容检查输入值,如果是,则用红色突出显示这两个项,或提供有关错误的附加信息(使用
    ErrorProvider
    ,为标签提供
    工具提示等)。您可以懒惰,只能在弹出窗口的末尾(按下按钮时)执行此操作

例如:

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
}

您的问题不清楚。请尝试重新构造您的问题,以便我们可以帮助您了解如何在asp.net中实施验证在asp.net中搜索requiredfieldvalidation Hello…当我应用上述代码时…出现错误“名称响应在当前上下文中不存在。我现在应该做什么响应。写入只是一个编写消息的函数。您可以从代码中跳过它。您可以在设计页上获取标签,然后将标签文本设置为错误消息。”
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();


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