是否可以检查一个或两个文本框是否更改了它们的值?
我已根据其中一个更新了我的代码,我想我错过了一些东西。如果更改了id和时间,则查询仅在第一次运行时起作用。如果id单独更改或同时更改或仅更改时间,则不会插入。
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
idchanged = True
flagam = True
flagpm = True
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
timechanged = True
flagam = True
flagpm = True
End Sub
MAIN
Select Case True
Case idchanged And timechanged
Dim cmd As New MySqlCommand("select count(*) from attendance where date_format(pmin,'%m %d %Y') = date_format(now(),'%m %d %Y') and empid = '" & TextBox1.Text & "';", conn)
Dim i As Integer = cmd.ExecuteScalar()
cmd = Nothing
If i = 0 AndAlso flagam = True AndAlso flagpm = True Then
str_insertAttendance = "insert ignore into attendance (empid, d, amin) values (@id, @date, @amIn)"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@date", time)
sqlCommand.Parameters.AddWithValue("@amIn", time)
sqlCommand.ExecuteNonQuery()
flagam = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = True Then
str_insertAttendance = "update attendance set amout=@amout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@amout", time)
sqlCommand.ExecuteNonQuery()
flagpm = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmin=@pmin where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmin", time)
sqlCommand.ExecuteNonQuery()
ElseIf i = 1 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmout=@pmout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmout", time)
sqlCommand.ExecuteNonQuery()
End If
idchanged = False
timechanged = False
Case Not timechanged And idchanged
Dim cmd As New MySqlCommand("select count(*) from attendance where date_format(pmin,'%m %d %Y') = date_format(now(),'%m %d %Y') and empid = '" & TextBox1.Text & "';", conn)
Dim i As Integer = cmd.ExecuteScalar()
cmd = Nothing
If i = 0 AndAlso flagam = True AndAlso flagpm = True Then
str_insertAttendance = "insert ignore into attendance (empid, d, amin) values (@id, @date, @amIn)"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@date", time)
sqlCommand.Parameters.AddWithValue("@amIn", time)
sqlCommand.ExecuteNonQuery()
flagam = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = True Then
str_insertAttendance = "update attendance set amout=@amout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@amout", time)
sqlCommand.ExecuteNonQuery()
flagpm = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmin=@pmin where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmin", time)
sqlCommand.ExecuteNonQuery()
ElseIf i = 1 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmout=@pmout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmout", time)
sqlCommand.ExecuteNonQuery()
End If
idchanged = False
Case Not idchanged And timechanged
Dim cmd As New MySqlCommand("select count(*) from attendance where date_format(pmin,'%m %d %Y') = date_format(now(),'%m %d %Y') and empid = '" & TextBox1.Text & "';", conn)
Dim i As Integer = cmd.ExecuteScalar()
cmd = Nothing
If i = 0 AndAlso flagam = True AndAlso flagpm = True Then
str_insertAttendance = "insert ignore into attendance (empid, d, amin) values (@id, @date, @amIn)"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@date", time)
sqlCommand.Parameters.AddWithValue("@amIn", time)
sqlCommand.ExecuteNonQuery()
flagam = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = True Then
str_insertAttendance = "update attendance set amout=@amout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@amout", time)
sqlCommand.ExecuteNonQuery()
flagpm = False
ElseIf i = 0 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmin=@pmin where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmin", time)
sqlCommand.ExecuteNonQuery()
ElseIf i = 1 AndAlso flagam = False AndAlso flagpm = False Then
str_insertAttendance = "update attendance set pmout=@pmout where empid=@id"
sqlCommand.CommandText = str_insertAttendance
sqlCommand.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox1.Text))
sqlCommand.Parameters.AddWithValue("@pmout", time)
sqlCommand.ExecuteNonQuery()
End If
timechanged = False
End Select
答案 0 :(得分:2)
您可以让两个文本框订阅同一个事件,如下所示:
Private Sub TextBoxAOrB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles textboxa.TextChanged, textboxb.TextChanged
Dim txtBoxSender As TextBox = sender
If txtBoxSender.Equals(textboxa) Then
'DO STUFF
ElseIf txtBoxSender.Equals(textboxb) Then
If textboxa.Text <> id Then
'TEXTBOX A also changed
' DO STUFF
End If
Else
'SOMETHING WRONG
End If
End Sub
由于您一次只能检查一个值,这将在textboxa更改时运行,如果textboxb在此之后发生更改则会再次运行,但如果textboxb自行更改则不会运行(这似乎就是您在问题中所说的内容)
答案 1 :(得分:1)
如果您依赖事件,您可能会遇到运行哪个评估代码的问题。
只要用户更改了任何内容TextBox1
,即使按下了一个键,TextBox1.Changed
事件也会触发。没有办法判断用户是否要更改TextBox2
并让代码等到所有更改都在评估开始之前完成。
但是,如果您要等到用户完成对TextBoxes
之一或两者的更改,然后让他们点击按钮(让我们称之为btnEvaluate
),您可以使用相应的每个文本框的.Changed
事件将布尔标志更改为true,然后在btnEvaluate
单击事件中,您可以运行适合哪些标志为真的代码。
像这样 - 我想...
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
tb1Changed = True
End Sub
Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
tb2Changed = True
End Sub
Private Sub btnEvaluate_Click(sender As Object, e As EventArgs) Handles btnEvaluate.Click
Select Case True
Case tb1Changed And tb2Changed
'do stuff 1st block of code
tb1Changed = False
tb2Changed = False
Case not tb1Changed And tb2Changed
'dostuff 2nd block of code
tb2Changed = False
End Select
End Sub
如果您需要将标记设置为False
并将其放在其他地方
True