vb.net - Backgroundworker 给出多个错误信息
问题描述
我有一个包含三个文本框的表单。在我的BackgroundWorker1_DoWork
处理程序中,我测试是否TextBox
有空并启动MessageBox
要求用户填写所有TextBox
es。这是在一个Try/Catch
块中完成的。我的问题是两个方面。如果TextBox
未填写 es,则用户在引发异常时获得第一个MessageBox
,然后是另一个……所以这将是用户获得的第二个。在我的处理程序中,我测试是否抛出了一个。它从不承认错误并立即执行块,这将是用户收到的第三个消息框,说“处理完成”。不应显示“流程完成”。MessageBox
Catch
MessageBox
BackGroundWorker1_RunWorkCompleted
Exception
Else
如何测试是否有TextBox
未填写的 es 以及是否没有 throw 1MessageBox
告诉用户填写所有TextBox
es?并让我的RunWorkerComplete
处理程序确认ElseIf e.Error IsNot Nothing
.
谢谢您的帮助。
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
BackgroundWorker1.WorkerReportsProgress = True
Try
For Each cntrl As Control In Me.Controls()
If TypeOf cntrl Is TextBox Then
If CType(cntrl, TextBox).Text.Equals(String.Empty) Or (CType(cntrl, TextBox).Text = "") Then
cntrl.BackColor = Color.Yellow
MessageBox.Show("Please enter value in all fields on form" & cntrl.Name.ToString())
cntrl.Focus()
End If
End If
Next
runProgram()
Catch ex As Exception
MessageBox.Show("An error occured while trying to load this application. Please contact Maxine Hammett for assistance " &
vbNewLine & "" & vbNewLine & String.Format("Error: {0}", ex.Message))
End Try
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
If e.Cancelled = True Then
MsgBox(" Operation Cancelled ")
ProgressBar1.Value = 0
ElseIf e.Error IsNot Nothing Then
MsgBox("Error in RunWorkerComplete" & e.Error.Message)
Else
MsgBox(" Process Complete ")
Close()
End If
End Sub
将控制检查移至执行按钮。但是现在我收到关于没有路径的文本框的错误(其中一个文本框是文件夹的路径)。
Private Sub btnExecute_Click(sender As Object, e As EventArgs) Handles btnExecute.Click
Dim launchProgram As Boolean = False
While launchProgram = False
For Each cntrl As Control In Me.Controls()
If TypeOf cntrl Is TextBox Then
If CType(cntrl, TextBox).Text.Equals(String.Empty) Or (CType(cntrl, TextBox).Text = "") Then
cntrl.BackColor = Color.Yellow
MessageBox.Show("Please enter value in all fields on form" & cntrl.Name.ToString())
cntrl.Focus()
launchProgram = False
Else
launchProgram = True
End If
End If
Next
End While
If launchProgram = True Then
BackgroundWorker1.RunWorkerAsync()
End If
End Sub
解决方案
我建议您一次检查一个文本框,如果它为空,则显示该消息:
Private Sub btnExecute_Click(sender As Object, e As EventArgs) Handles btnExecute.Click
For Each cntrl As TextBox In Controls.OfType(Of TextBox)
If String.IsNullOrEmpty(cntrl.Text) Then
cntrl.BackColor = Color.Yellow
MessageBox.Show("Please enter value in all fields on form" & cntrl.Name.ToString())
cntrl.Focus()
Return
Else
cntrl.BackColor = SystemColors.Window
End If
Next
BackgroundWorker1.RunWorkerAsync()
End Sub
或者,For..Each
如果您确实需要以这种方式提示用户,则可以连接块中空文本框的名称:
Private Sub btnExecute_Click(sender As Object, e As EventArgs) Handles btnExecute.Click
Dim sb As New StringBuilder
For Each cntrl As TextBox In Controls.OfType(Of TextBox)
If String.IsNullOrEmpty(cntrl.Text) Then
If sb.Length > 0 Then sb.Append(", ")
sb.Append(cntrl.Name)
cntrl.BackColor = Color.Yellow
Else
cntrl.BackColor = SystemColors.Window
End If
Next
If sb.Length > 0 Then
MessageBox.Show("Please enter value in all fields on form" & sb.ToString())
Controls.OfType(Of TextBox).Where(Function(a) String.IsNullOrEmpty(a.Text)).FirstOrDefault?.Focus()
Return
End If
BackgroundWorker1.RunWorkerAsync()
End Sub
否则,运行工人。
祝你好运。
推荐阅读
- windows - 批处理文件 - 当前工作目录干扰环境变量 CD
- reactjs - React Stripe 结帐多个行项目
- google-apps-script - 如何通过谷歌应用脚本在一个单元格中应用多个数据验证规则?
- python - 不同类别的堆积条形图颜色
- python - 按 id 分组并根据日期计算销售变化
- python - 我试图将 Python 添加到 VSCode,但它不起作用
- python - 通过混合 AND 和 OR 使用 str.contains 识别子字符串
- android - Android:如果用户没有完成注册,他仍然可以进入 MainActivity
- php - 遇到PHP错误,我自己无法调试
- php - 在 Symfony 5 中使用带有标记的 Redis