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
等),并在输入的数据正常时检查该控件。如果不是,则将旁边的标签设为红色(或者以其他方式向用户提示,哪些数据不正确)
此外,在插入数据之前,对所有值进行全面检查,以更积极的方式告知用户错误:弹出窗口,将焦点设置为具有错误值的控件,等等
重点是:
- 用户在输入数据后立即查看数据是否错误是很好的(例如,当输入
时,能够立即看到错误的小数点字符将允许用户快速点击Backspace并更正它,而如果它仅在焦点丢失时显示,则需要其他步骤:向后移动焦点、向后移动插入符号等),因此double
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
}