带有输入验证的Vb.Net消息框
所以我买了一台新的笔记本电脑,帮我决定我想出了一个计分系统。我制作了一个应用程序来帮助计算,它由一系列复选框组成,这些复选框针对不同类别的组件等(CPU、RAM等)具有不同的选项。根据他们的表现给他们打分。 我有几行代码检查每个类别是否选择了多个组件。 如果超过1,则会弹出一个消息框,告诉用户然后重置选项。 但是,消息框在第一次启动后会出现两次 错误视频: 这是我的第一个vb.net solo GUI程序,所以请耐心等待 非常感谢,, :) 末级尝试更换带有输入验证的Vb.Net消息框,vb.net,user-interface,messagebox,logic-error,Vb.net,User Interface,Messagebox,Logic Error,所以我买了一台新的笔记本电脑,帮我决定我想出了一个计分系统。我制作了一个应用程序来帮助计算,它由一系列复选框组成,这些复选框针对不同类别的组件等(CPU、RAM等)具有不同的选项。根据他们的表现给他们打分。 我有几行代码检查每个类别是否选择了多个组件。 如果超过1,则会弹出一个消息框,告诉用户然后重置选项。 但是,消息框在第一次启动后会出现两次 错误视频: 这是我的第一个vb.net solo GUI程序,所以请耐心等待 非常感谢,, :) 末级尝试更换 Public Sub SSD512_C
Public Sub SSD512_CheckedChanged(sender As Object, e As EventArgs) Handles SSD512.CheckedChanged
IS_SSD512 = True
End Sub
与
我认为问题是,当表单加载时,它会调用取消复选框,这样您的变量就会变为真。如果使用适当的控件,您可以节省大量代码<代码>单选按钮s仅允许在容器中进行单个选择。容器可以是组框或表单 使用
NumericUpDown
将确保您获得端口区域的数字。用户可以在文本框中放入任何内容
我在按钮代码中多次使用了GetSelectedRadioButton
。此函数获取包含单选按钮的容器并返回所选单选按钮。它通过一点Linq魔术来实现这一点,它检查容器中的每个单选按钮,直到找到一个.Checked=True
。此单选按钮被分配到rb
,并返回到调用代码。如果未找到选中的单选按钮,则返回Nothing
如果我们试图检查单选按钮的.Name
属性,当它为Nothing
时,我们会得到可怕的NRE(空引用异常),因此,我们要做的第一件事是检查返回的单选按钮是否为Nothing
。如果用户选择失败,我们将显示一个消息框并退出sub
如果用户进行了选择,我们将使用Select Case
或If
语句来增加Total
当涉及到端口时,我们通过控件循环获取值
属性(一个十进制
)。若要将其添加到总计中,必须首先将其转换为整数
最后显示总数
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
请将代码和数据添加为文本(使用代码格式),而不是图像(或视频)。图片:A)不允许我们复制和粘贴代码/错误/数据进行测试;B) 不允许基于代码/错误/数据内容进行搜索;C) 视力受损的用户很难清晰阅读,原因还有很多。如果图像添加了一些重要信息,而这些信息并不仅仅是通过文本代码/错误/数据传达出来,那么除了代码格式的文本之外,还应该使用图像。@Steve,这太冗长了。你能解释一下你想要什么吗?是否要添加代码副本?最简单的解决方案是只使用无线组而不是复选框。请为此项目和所有vb.net项目启用“严格”选项。您正在尝试将.Text属性(字符串)分配给整数变量。另外,Text是一个属性而不是一个方法。后跟。带括号的文本表示正在调用方法。
Public Sub SSD512_CheckedChanged(sender As Object, e As EventArgs) Handles SSD512.CheckedChanged
IS_SSD512 = SSD512.Checked
End Sub
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