积极答复者
关于e.cancel

问题
-
你好!
在Validating事件的处理函数中,如果验证失败,就将CancelEventArgs 类型的参数e的 Cancel 属性设置为 true ,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。当然,你添加按钮的事件也取消了,例如这样:
private void textBox1_Validating(object sender, CancelEventArgs e)
{
if (this.textBox1.Text == "aaa")
e.Cancel = true;
}
希望以上解释对你有一些帮助,如果还有疑问,我们可以继续讨论啊!
周雪峰按照上面的建议,运行改后的代码,仍然是在报错的同时,执行click事件,成功插入带有错误的信息,这是怎么回事?
程序执行顺序:1)先将两个文本框输入值,不分先后。2)点击按钮,执行click 事件。
麻烦帮忙看看,实在不知道是哪里的问题?
谢谢!
我改后的代码为: Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If Not Regex.IsMatch(TextBox1.Text, "^\s*\d{2}\s*$") Then
ErrorProvider1.SetError(TextBox1, "图书类型编号应由2位数字组成!")
TextBox1.Focus()
Return
Else
ErrorProvider1.SetError(TextBox1, "")
End Ifcon.Open()
Dim cmd1 As New SqlCommand("select * from try where typeno='" & Me.TextBox1.Text.Trim() & "'", con)
Dim reader As SqlDataReader
reader = cmd1.ExecuteReader()
If (reader.Read()) Then
ErrorProvider1.SetError(TextBox1, "此编号已存在,请重新输入!")
TextBox1.Focus()e.Cancel = True
Else
ErrorProvider1.SetError(TextBox1, "")
End If
con.Close()
End SubPrivate Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
If Not Regex.IsMatch(TextBox2.Text, "^[a-w]{2}") Then
ErrorProvider1.SetError(TextBox2, "图书类型名称应由小写字母组成!")
TextBox2.Focus()
Return
Else
ErrorProvider1.SetError(TextBox2, "")
End Ifcon.Open()
Dim cmd1 As New SqlCommand("select * from try where bname='" & Me.TextBox2.Text.Trim() & "'", con)
Dim reader As SqlDataReader
reader = cmd1.ExecuteReader()
If (reader.Read()) Then
ErrorProvider1.SetError(TextBox2, "此编号已存在,请重新输入!")
TextBox2.Focus()
e.Cancel = True
Else
ErrorProvider1.SetError(TextBox2, "")
'f2 = True
End If
con.Close()
End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
con.Open()
Dim cmd1 As New SqlCommand("insert into try values('" & TextBox1.Text & "','" & TextBox2.Text & "')", con)
cmd1.ExecuteNonQuery()
MsgBox("添加操作成功!", 64, "提示")
con.Close()
TextBox1.Text = ""
TextBox2.Text = ""
End Sub- 已更改类型 周雪峰MVP, Moderator 2009年5月2日 8:04
答案
-
你在textBox1合法后把焦点放到textBox2上!
周雪峰- 已标记为答案 Riquel_DongModerator 2009年5月6日 11:41
全部回复
-
程序启动后,我的操作步骤是:先在textbox1里输入,程序判断合法后,再在textbox2里输入,然后点击“添加”按钮,程序提示“插入成功!”
我在单步执行时发现:程序对textbox1进行判断,输入合法后,会直接跳到 按钮的click事件,根本没执行textbox2的验证事件,这是为什么?再麻烦你给看看。
代码:
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If Not Regex.IsMatch(TextBox1.Text, "^\s*\d{2}\s*$") Then
ErrorProvider1.SetError(TextBox1, "图书类型编号应由2位数字组成!")
TextBox1.Focus()e.Cancel = True
Return
Else
ErrorProvider1.SetError(TextBox1, "")
End If
con.Open()
Dim cmd1 As New SqlCommand("select * from try where typeno='" & Me.TextBox1.Text.Trim() & "'", con)
Dim reader As SqlDataReader
reader = cmd1.ExecuteReader()
If (reader.Read()) Then
ErrorProvider1.SetError(TextBox1, "此编号已存在,请重新输入!")
TextBox1.Focus()e.Cancel = True
Else
ErrorProvider1.SetError(TextBox1, "")
End If
con.Close()
End SubPrivate Sub TextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
If Not Regex.IsMatch(TextBox2.Text, "^[a-w]{2}") Then
ErrorProvider1.SetError(TextBox2, "图书类型名称应由2位小写字母组成!")
TextBox2.Focus()e.Cancel = True
Return
Else
ErrorProvider1.SetError(TextBox2, "")
End Ifcon.Open()
Dim cmd1 As New SqlCommand("select * from try where typename='" & Me.TextBox2.Text.Trim() & "'", con)
Dim reader As SqlDataReader
reader = cmd1.ExecuteReader()
If (reader.Read()) Then
ErrorProvider1.SetError(TextBox2, "此编号已存在,请重新输入!")
TextBox2.Focus()e.Cancel = True
Else
ErrorProvider1.SetError(TextBox2, "")
'f2 = True
End If
con.Close()
End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
con.Open()
Dim cmd1 As New SqlCommand("insert into try values('" & TextBox1.Text & "','" & TextBox2.Text & "')", con)
cmd1.ExecuteNonQuery()
MsgBox("添加操作成功!", 64, "提示")
con.Close()
TextBox1.Text = ""
TextBox2.Text = ""
End Sub -
你在textBox1合法后把焦点放到textBox2上!
周雪峰- 已标记为答案 Riquel_DongModerator 2009年5月6日 11:41