所以我在学校实习,让我用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按顺序确定来自数据集的哪些信息将填充下一个。因此,取决于“年”中选择的年份。组合框,确定哪些供应商填充了供应商'组合框,并确定哪些报告填充在“报告”中。组合框。
答案 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
的函数,让调用代码管理要显示的表单......并且不要使用默认的表单实例。