Vb.net 如何在my messagebox中将所有验证错误显示为列表

Vb.net 如何在my messagebox中将所有验证错误显示为列表,vb.net,Vb.net,我的代码有问题。我试图在消息框中显示所有验证错误。谁能告诉我为什么我的错误只有一个出现在盒子里?我尝试了更多的解决方案,环顾四周,但我需要一些帮助 Public Class Form1 Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click If Data_Validated_ok() = False Then Exit Sub End Sub Privat

我的代码有问题。我试图在消息框中显示所有验证错误。谁能告诉我为什么我的错误只有一个出现在盒子里?我尝试了更多的解决方案,环顾四周,但我需要一些帮助

Public Class Form1
Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    If Data_Validated_ok() = False Then Exit Sub


End Sub
Private Function Data_Validated_ok() As Boolean

    Dim intErrCount As Integer
    Dim strErrMessage As String = String.Empty
    Dim ctrlError As New Collection

    ' make sure Premium channel is selected

    If Me.lstPremium.SelectedIndex < 0 Then
        intErrCount = intErrCount + 1
        strErrMessage = intErrCount & ". Premium Channels is a required field." _
        & vbCrLf
        ctrlError.Add(lstPremium.SelectedIndex)
    End If
    ' make sure a customer type is selected in the Radioboxes

    If radBusiness.Checked = False And
                radResidential.Checked = False Then
        intErrCount = intErrCount + 1
        strErrMessage = intErrCount & ".Customer Type is a required field." _
         & vbCrLf
        ctrlError.Add(radBusiness.Checked, radResidential.Checked)
    End If

    ' make sure a business customer checks at least one option in the listbox

    If radBusiness.Checked = True And Me.lstConnections.SelectedIndex < 0 Then
        intErrCount = intErrCount + 1
        strErrMessage = intErrCount & ". Business Customers must select 1 or more Connection." _
        & vbCrLf
        ctrlError.Add(lstConnections.SelectedIndex)
    End If

    ' show all errors in a messagebox

    If intErrCount > 0 Then
        MessageBox.Show(strErrMessage, "Validation Rule(s)", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Dim ctrl As Control
        ctrl = ctrlError.Item(1)
        ctrl.Focus()
        Return False
    Else
        Return True
    End If

End Function
公共类表单1
私有子btnCalculate\u单击(发送者作为对象,e作为事件参数)处理btnCalculate。单击
如果数据_Validated_ok()=False,则退出Sub
端接头
私有函数数据\u已验证\u ok()为布尔值
整数计数
Dim strErrMessage As String=String.Empty
Dim ctrlError作为新系列
'确保选择了高级频道
如果Me.lstprimium.SelectedIndex<0,则
intErrCount=intErrCount+1
strErrMessage=intErrCount&“。高级频道是必填字段。”_
&vbCrLf
ctrlError.Add(lstPremium.SelectedIndex)
如果结束
'确保在RadioBox中选择了客户类型
如果radBusiness.Checked=False,则
radResidential.Checked=False然后
intErrCount=intErrCount+1
strErrMessage=intErrCount&“。客户类型是必填字段。”_
&vbCrLf
ctrlError.Add(radBusiness.Checked,radResidential.Checked)
如果结束
'确保业务客户在列表框中至少选中一个选项
如果radBusiness.Checked=True且Me.lstConnections.SelectedIndex<0,则
intErrCount=intErrCount+1
strErrMessage=intErrCount&。业务客户必须选择一个或多个连接_
&vbCrLf
ctrlError.Add(lstConnections.SelectedIndex)
如果结束
'在messagebox中显示所有错误
如果intErrCount>0,则
显示(strErrMessage,“验证规则”,MessageBoxButtons.OK,MessageBoxIcon.Information)
按ctrl键作为控件
ctrl=ctrlError.Item(1)
ctrl.Focus()
返回错误
其他的
返回真值
如果结束
端函数

将每个错误存储在
列表(字符串)
中如何?您的变量
ctrlError
不是存储控件,而是存储整数和布尔值-您应该在那里有强制转换错误

Private Function Data_Validated_ok() As Boolean
  Dim errorMsgs As New List(Of String)
' make sure Premium channel is selected

  If Me.lstPremium.SelectedIndex < 0 Then
     errorMsgs.Add("Premium Channels is a required field.")
  End If
' make sure a customer type is selected in the Radioboxes

  If radBusiness.Checked = False AndAlso
            radResidential.Checked = False Then
    errorMsgs.Add("Customer Type is a required field.")
  End If

' make sure a business customer checks at least one option in the listbox

  If radBusiness.Checked = True And Me.lstConnections.SelectedIndex < 0 Then
    errorMsgs.Add("Business Customers must select 1 or more Connection.")
  End If

' show all errors in a messagebox

  If errorMsgs.Count > 0 Then
    MessageBox.Show(String.Join(Environment.Newline, errorMsgs.ToArray), "Validation Rule(s)", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return False
  Else
    Return True
  End If

End Function
Private Function Data\u Validated\u ok()为布尔值
Dim errorMsgs作为新列表(字符串)
'确保选择了高级频道
如果Me.lstprimium.SelectedIndex<0,则
errorMsgs.Add(“高级频道是必填字段。”)
如果结束
'确保在RadioBox中选择了客户类型
如果radBusiness.Checked=False,则
radResidential.Checked=False然后
errorMsgs.Add(“客户类型是必填字段。”)
如果结束
'确保业务客户在列表框中至少选中一个选项
如果radBusiness.Checked=True且Me.lstConnections.SelectedIndex<0,则
errorMsgs.Add(“业务客户必须选择一个或多个连接。”)
如果结束
'在messagebox中显示所有错误
如果errorMsgs.Count>0,则
Show(String.Join(Environment.Newline,errorMsgs.ToArray),“验证规则”,MessageBoxButtons.OK,MessageBoxIcon.Information)
返回错误
其他的
返回真值
如果结束
端函数

因为您没有将消息与&=连接起来,所以您将在下一条消息中分配变量。谢谢您,有一天,这完成了我在strmessage中必须在=之前加上的技巧