如何解决带有输入验证的 Vb.Net 消息框
所以我要买一台新的笔记本电脑来帮助我决定我想出了一个积分系统。我制作了一个应用程序来帮助计算,它由一系列复选框组成,这些复选框具有不同类别的组件等(cpu、RAM 等)的不同选项。他们会根据他们的表现获得分数。 我有几行代码来检查每个类别是否选择了多个组件。 如果超过 1 个,则会弹出一个消息框,告诉用户然后重置选项。 但是,第一次访问后,消息框出现了两次。
错误视频:https://imgur.com/a/D9WSVO5
这是我的第一个 vb.net solo GUI 程序,所以请多多关照。
非常感谢, :)
Public Class Form1
Dim IS_R54500 As Boolean = False
Dim IS_R53500 As Boolean = False
Dim IS_R34300 As Boolean = False
Dim IS_Gb4 As Boolean = False
Dim IS_Gb8 As Boolean = False
Dim IS_Screen14 As Boolean = False
Dim IS_Screen15 As Boolean = False
Dim IS_SSD128 As Boolean = False
Dim IS_SSD256 As Boolean = False
Dim IS_SSD512 As Boolean = False
Dim IS_USBA As Integer = 0
Dim IS_USBC As Integer = 0
Dim IS_HDMI As Integer = 0
Dim IS_DP As Integer = 0
Dim Total As Integer = 0
Public Sub R54500_CheckedChanged(sender As Object,e As EventArgs) Handles R54500.CheckedChanged
IS_R54500 = True
End Sub
Public Sub R53500_CheckedChanged(sender As Object,e As EventArgs) Handles R53500.CheckedChanged
IS_R53500 = True
End Sub
Public Sub R34300_CheckedChanged(sender As Object,e As EventArgs) Handles R34300.CheckedChanged
IS_R34300 = True
End Sub
Public Sub Gb4_CheckedChanged(sender As Object,e As EventArgs) Handles Gb4.CheckedChanged
IS_Gb4 = True
End Sub
Public Sub Gb8_CheckedChanged(sender As Object,e As EventArgs) Handles Gb8.CheckedChanged
IS_Gb8 = True
End Sub
Public Sub Screen14_CheckedChanged(sender As Object,e As EventArgs) Handles Screen14.CheckedChanged
IS_Screen14 = True
End Sub
Public Sub Screen15_CheckedChanged(sender As Object,e As EventArgs) Handles Screen15.CheckedChanged
IS_Screen15 = True
End Sub
Public Sub SSD128_CheckedChanged(sender As Object,e As EventArgs) Handles SSD128.CheckedChanged
IS_SSD128 = True
End Sub
Public Sub SSD256_CheckedChanged(sender As Object,e As EventArgs) Handles SSD256.CheckedChanged
IS_SSD256 = True
End Sub
Public Sub SSD512_CheckedChanged(sender As Object,e As EventArgs) Handles SSD512.CheckedChanged
IS_SSD512 = True
End Sub
Public Sub USBA_TextChanged(sender As Object,e As EventArgs) Handles USBA.TextChanged
IS_USBA = USBA.Text()
End Sub
Public Sub USBC_TextChanged(sender As Object,e As EventArgs) Handles USBC.TextChanged
IS_USBC = USBC.Text()
End Sub
Public Sub HDMI_TextChanged(sender As Object,e As EventArgs) Handles HDMI.TextChanged
IS_HDMI = HDMI.Text()
End Sub
Public Sub DP_TextChanged(sender As Object,e As EventArgs) Handles DP.TextChanged
IS_DP = DP.Text()
End Sub
Public Sub Results_Click(sender As Object,e As EventArgs) Handles Results.Click
Results.Text = CStr(Total)
End Sub
Public Sub Calculate_Click(sender As Object,e As EventArgs) Handles Calculate.Click
Total = 0
If IS_R54500 And IS_R53500 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_R54500 = False
IS_R53500 = False
R54500.CheckState = CheckState.Unchecked
R53500.CheckState = CheckState.Unchecked
End If
If IS_R54500 And IS_R34300 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_R54500 = False
IS_R34300 = False
R54500.CheckState = CheckState.Unchecked
R34300.CheckState = CheckState.Unchecked
End If
If IS_R53500 And IS_R34300 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_R53500 = False
IS_R34300 = False
R53500.CheckState = CheckState.Unchecked
R34300.CheckState = CheckState.Unchecked
End If
If IS_Gb8 And IS_Gb4 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_Gb4 = False
IS_Gb8 = False
Gb4.CheckState = CheckState.Unchecked
Gb8.CheckState = CheckState.Unchecked
End If
If IS_Screen14 And IS_Screen15 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_Screen14 = False
IS_Screen15 = False
Screen14.CheckState = CheckState.Unchecked
Screen15.CheckState = CheckState.Unchecked
End If
If IS_SSD128 And IS_SSD256 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_SSD128 = False
IS_SSD256 = False
SSD128.CheckState = CheckState.Unchecked
SSD256.CheckState = CheckState.Unchecked
End If
If IS_SSD128 And IS_SSD512 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_SSD128 = False
IS_SSD512 = False
SSD128.CheckState = CheckState.Unchecked
SSD512.CheckState = CheckState.Unchecked
End If
If IS_SSD512 And IS_SSD256 = True Then
MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
IS_SSD512 = False
IS_SSD256 = False
SSD512.CheckState = CheckState.Unchecked
SSD256.CheckState = CheckState.Unchecked
End If
If IS_R54500 = True Then
Total += 3
End If
If IS_R53500 = True Then
Total += 2
End If
If IS_R34300 = True Then
Total += 1
End If
If IS_Gb8 = True Then
Total += 2
End If
If IS_Gb4 = True Then
Total += 1
End If
If IS_Screen14 = True Then
Total += 1
End If
If IS_Screen15 = True Then
Total += 2
End If
If IS_SSD128 = True Then
Total += 1
End If
If IS_SSD256 = True Then
Total += 2
End If
If IS_SSD512 = True Then
Total += 3
End If
Total += CInt(IS_USBA)
Total += CInt(IS_USBC)
Total += CInt(IS_HDMI)
Total += CInt(IS_DP)
''MessageBox.Show("There is more than one option chosen in a certain category." & vbCrLf & "Please fix this error and then try again.","Error")
Results.Text = Total
End Sub
结束课程
解决方法
尝试更换
Public Sub SSD512_CheckedChanged(sender As Object,e As EventArgs) Handles SSD512.CheckedChanged
IS_SSD512 = True
End Sub
与
Public Sub SSD512_CheckedChanged(sender As Object,e As EventArgs) Handles SSD512.CheckedChanged
IS_SSD512 = SSD512.Checked
End Sub
我认为问题是当表单加载时,它会调用取消选中框,因此您的变量变为 TRUE。
,如果您使用正确的控件,您可以为自己节省大量代码。 RadioButton
只允许在容器中进行单个选择。容器可以是分组框或表单。
使用 NumericUpDown
将确保您获得端口区域的编号。用户可以将任何内容放入 TextBox
。
我在按钮代码中多次使用了 GetSelectedRadioButton
。此函数接受一个包含单选按钮的容器并返回选定的单选按钮。它通过一点 Linq 魔法来实现这一点,它检查容器中的每个单选按钮,直到在 .Checked = True
处找到一个。此单选按钮分配给 rb
并返回到调用代码。如果未找到选中的单选按钮,则返回 Nothing
。
如果我们试图在单选按钮的 .Name
属性为 Nothing
时检查它,我们会得到可怕的 NRE(空引用异常)所以,我们要做的第一件事是检查返回的单选按钮 Is Nothing
。如果用户没有做出选择,我们会显示一个消息框并退出子。
如果用户进行了选择,我们将使用 Select Case
或 If
语句来增加 Total
。
当涉及到端口时,我们通过控件循环获取 Value
属性(Decimal
)。要将其添加到 Total,必须先将其转换为 Integer
。
最后显示总计。
Private Sub btnCalculate_Click(sender As Object,e As EventArgs) Handles btnCalculate.Click
Dim Total As Integer
Dim rb = GetSelectedRadioButton(gbProcessor)
If rb Is Nothing Then
MessageBox.Show("Please select a Processor.")
Exit Sub
Else
Select Case GetSelectedRadioButton(gbProcessor).Name
Case "rb545"
Total += 3
Case "rb535"
Total += 2
Case "rb343"
Total += 1
End Select
End If
Dim rb1 = GetSelectedRadioButton(gbMemory)
If rb1 Is Nothing Then
MessageBox.Show("Please select Memory")
Exit Sub
Else
If rb1.Name = "rb4" Then
Total += 1
Else
Total += 2
End If
End If
Dim rb2 = GetSelectedRadioButton(gbScreenSize)
If rb2 Is Nothing Then
MessageBox.Show("Please select a Screen Size.")
Exit Sub
Else
If rb2.Name = "rb14" Then
Total += 1
Else
Total += 2
End If
End If
Dim rb3 = GetSelectedRadioButton(gbStorage)
If rb3 Is Nothing Then
MessageBox.Show("Please select Storage size.")
Exit Sub
Else
Select Case rb3.Name
Case "rb128"
Total += 1
Case "rb256"
Total += 2
Case "rb512"
Total += 3
End Select
End If
For Each ctrl As NumericUpDown In gbPorts.Controls.OfType(Of NumericUpDown)
Total += CInt(ctrl.Value)
Next
lblCalculate.Text = Total.ToString
End Sub
Private Function GetSelectedRadioButton(Container As Control) As RadioButton
Dim rb = Container.Controls.OfType(Of RadioButton)().FirstOrDefault(Function(r) r.Checked = True)
Return rb
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。