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



这是我的代码:

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

订阅textBox_project_namecomboBox1_project_statusdateTimePicker1控件的Validating事件。在这些处理程序中,验证控件中的数据,如果数据无效,则为相应的控件设置ErrorProvider错误。

例如,验证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, "");  
}
}
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";
}
}

我通常订阅文本框的LostFocus事件,这样,每当用户输入到另一个文本框而当前文本框失去焦点时,它应该提示您想要的任何内容。这对我来说是有效的。

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

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

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

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

嗨,如果textBox_project_name,您必须检查if语句。文本,组合框1_project_status。Text和dateTimePicker1.文本不为null或为空。

这是一种方法。

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

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

}

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

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

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

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

要点是:

  • 用户在输入数据时立即查看数据是否错误是很好的(例如,当输入double时,能够立即看到错误的小数点字符将使用户快速点击Backspace并进行更正,而如果它只在焦点丢失时显示,则需要额外的步骤:将焦点向后移动、将插入符号向后移动等),所以OnTextChanged>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
}

最新更新