更有效的错误捕获?

时间:2015-11-20 17:07:13

标签: vb.net performance if-statement combobox

所以我在学校实习,让我用VB.NET编写程序代码。其中一个表单有三个组合框,在继续之前必须在每个组合框中选择一个选项。如果用户错过了其中一个组合框,我试图引起他们的注意,在继续之前返回并做出选择。我有一个if语句,它完全符合我的要求:

If cboYear.SelectedIndex = -1 Then
        warningString = warningString + "Year" & vbNewLine & "Vendor" & vbNewLine & "Report"
        txtYear.ForeColor = Color.Red
        TextBox7.ForeColor = Color.Red
        txtReport.ForeColor = Color.Red
        MessageBox.Show(warningString)
    ElseIf cboVendorName.SelectedIndex = -1 Then
        warningString = warningString + "Vendor" + vbNewLine & "Report"
        txtYear.ForeColor = Color.Black
        TextBox7.ForeColor = Color.Red
        txtReport.ForeColor = Color.Red
        MessageBox.Show(warningString)
    ElseIf cboReport.SelectedIndex = -1 Then
        warningString = warningString + "Report" & vbNewLine
        txtYear.ForeColor = Color.Black
        TextBox7.ForeColor = Color.Black
        txtReport.ForeColor = Color.Red
        MessageBox.Show(warningString)
    Else
        Main.Show()
        Me.Hide()
    End If

(warningString是一个类似&#34的通用字符串;请填写以下内容:")

就像我说的那样,这完全符合我的要求,而且很容易遵循我的逻辑。我的问题是如何才能使这段代码更有效率?我已经尝试了数组来保存组合框选择,我尝试了一个for循环和一个选择案例来尝试简化代码无济于事。在到达我的Select Case或For循环之前,数组总是会中断并返回NullReferenceException以查看组合框中是否有值。

如果有人可以帮助我完成为上述工作获得某种循环的逻辑,那将是非常棒的。我不是要求工作代码或类似的东西,但是如果有一个解决方案可以找到并且我自己到达那里,我会在这里发布它以供将来参考。谁知道,这甚至可能是最有效的方式?

编辑:Plutonix非常慷慨地对我的问题提出了一些意见,他提出了一个关于if语句不是互斥的观点。这是因为组合框由数据集填充,并且每个CBO按顺序确定来自数据集的哪些信息将填充下一个。因此,取决于“年”中选择的年份。组合框,确定哪些供应商填充了供应商'组合框,并确定哪些报告填充在“报告”中。组合框。

1 个答案:

答案 0 :(得分:0)

由于每个测试都在做不同的事情,因此循环会很笨拙。即使您只在A验证后启用B,您可能需要允许它们取消以前的选择。代码可以压缩:

Dim IsValid As Boolean = True
txtYear.ForeColor = Color.Black
TextBox7.ForeColor = Color.Black
txtReport.ForeColor = Color.Black

If cboYear.SelectedIndex = -1 Then
    warningString = warningString & "Year" & vbNewLine & "Vendor" & vbNewLine & "Report"
    txtYear.ForeColor = Color.Red
    TextBox7.ForeColor = Color.Red
    txtReport.ForeColor = Color.Red
    IsValid = False
End If

If cboVendorName.Enabled AndAlso cboVendorName.SelectedIndex = -1 Then
    warningString = warningString & "Vendor" & vbNewLine & "Report"
    TextBox7.ForeColor = Color.Red
    txtReport.ForeColor = Color.Red
    IsValid = False
End If

If cboReport.Enabled AndAlso cboReport.SelectedIndex = -1 Then
    warningString = warningString & "Report" & vbNewLine
    txtReport.ForeColor = Color.Red
    IsValid = False
End If

'  See note
If IsValid = False Then
    MessageBox.Show(warningString)
Else
    ' DONT use default form instances!
    Main.Show()
    Me.Hide()
End If

IF发生了一些变化:我不知道你怎么知道哪些是活跃的,上面的代码使用.Enabled来查看每个是否已经设置好使用。这样,在验证#1时,您不会报告CBO 2和3上的错误。

我会使它成为Returns IsValid的函数,让调用代码管理要显示的表单......并且不要使用默认的表单实例。