我有一个代码放在一个文本框中得到焦点事件。它做的是当它获得一个焦点时它从一个表中找到一个值并将其分配给文本框。但如果它没有值它告诉用户定义它并将焦点放在另一个控件上,如果响应为是,否则告诉用户它不能继续。
我得到的是,如果没有价值并且回答是肯定的,它就无法将焦点放在该控件上并且只是循环消息。任何打破循环的想法如果答案是肯定的。
qry = "SELECT * FROM [fuel_allowance] WHERE [project number]='" & projcode & "' AND [employee number]='" & empcode & "'" & _
"AND [current month]=(SELECT [current month] FROM [fuel_allowance] WHERE [project number]='" & projcode & "' AND" & _
"[employee number]='" & empcode & "' AND MONTH([current month])=" & currentdate.Month & " AND YEAR([current month])=" & _
"" & currentdate.Year & ")"
If Button5.Tag = "New" Then
Dim dr As OleDb.OleDbDataReader = GetData(qry)
If dr.HasRows = True Then
Do While dr.Read
TextBox32.Text = dr.Item("total")
If Val(TextBox32.Text) > 800 Then
TextBox37.Text = Val(TextBox32.Text) - 800
Else
TextBox37.Text = 0
End If
TextBox38.Text = Val(TextBox36.Text) + Val(TextBox37.Text)
TextBox31.Text = (Val(TextBox33.Text) + Val(TextBox32.Text)) * Val(TextBox34.Text)
Loop
Else
If MsgBox("Fuel allowance not defined for the current month of " & MonthName(currentdate.Month, False) & vbCrLf & _
"Do you want to define it?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Project Payroll") = MsgBoxResult.Yes Then
If TextBox32.Focused = True Then
TextBox27.Focus()
End If
Else
MsgBox("Cannot define allowance without defining fuel allowance", MsgBoxStyle.Critical, "Project Payroll")
Exit Sub
End If
End If
End If
答案 0 :(得分:0)
这似乎是GotFocus事件的一个相当常见的问题。你在这里错过的,与其他所有犯这个错误的人一起,就是MessageBox1在MessageBox关闭后再次触发GotFocus事件。
在此行之后您永远不会执行任何代码:
If MsgBox("Fuel allowance ...") = MsgBoxResult.Yes
您的代码执行是这样的:
我建议您使用TextBox.Enter事件。它仅被触发一次,并且在关闭Messagebox时不会再次调用它。