我正在获取msgbox是否选中了其中一个框。如果有人有想法请。我会非常感激
Private Function ValidateDiscountSelected(ByRef blnDiscount As Boolean,
ByRef strDiscount As String) As Integer
' This function confirms the user selected a discount available.
Dim intDiscountSelected As Integer
Try
intDiscountSelected = Convert.ToInt32(grpDiscount.Controls)
strDiscount = grpDiscount.Controls.ToString()
blnDiscount = True
Catch exception As SystemException
' Confirms a radio button was selected.
MsgBox("Please Select If Discount Is Available", , "You must Choose A Discount If Avaiable")
blnDiscount = False
End Try
Return intDiscountSelected
答案 0 :(得分:3)
在该代码中可以改进几件事。首先是:
Convert.ToInt32(grpDiscount.Controls)
该代码尝试将整个控件集合转换为整数,这是不可行的。因此,始终抛出异常。
您显然想知道检查了哪个控件,但仅此一项不会告诉您所需的折扣级别:表示“2%折扣”的控件与2
不同。 UI控件会告诉您用户想要什么,但您需要一些方法将其转换回类似数字的内容。
确定已检查的RB
Dim rb = GroupBox3.Controls.OfType(Of RadioButton).
FirstOrDefault(Function(w) w.Checked)
这将告诉您选中了哪个(如果有)控件。如果每个控件都存储在.Tag
属性中的折扣(例如“10%折扣”控件具有10
),则可以从已选中的控件中获取金额:
If rb IsNot Nothing Then
' determine discount amount
DiscountLevel = Convert.ToInt32(rb.Tag)
End If
Return DiscountLevel
如果未选择任何内容,则rb
将为Nothing
。这不应该发生 - 一组RadioButtons
应该提供默认值。
循环版
Dim DiscountLevel As Int32 = -1
For Each rbtn As RadioButton In GroupBox3.Controls.OfType(Of RadioButton)()
If rbtn.Checked Then
DiscountLevel = Convert.ToInt32(rb.Tag)
End If
Next
最后,如果选中一个,DiscountLevel
将为> -1。
<强>例外强>
异常是针对特殊情况,而不是流量控制或数据验证。当您的代码失败时,您的代码实际上正在惩罚用户。 该代码不是那么复杂或容易出错,需要Try / Catch。
<强>组合框强>
ComboBox
可以与RadioButtons
组做同样的事情,但做得更好,占用的空间更少。您可以使用DiscountLevel
个对象填充它,其中文本显示“10%”或其他任何内容,同时将数值返回到您的代码。
Basic class to keep a name/text and value together。这将向用户显示名称/文本,但会向您的代码返回一个值。
答案 1 :(得分:0)
我想将此留作评论以供比较,但我还不能发表评论。对于仅3个单选按钮之间的选择,另一个替代方案是简单的If-ElseIf语句。
Dim intDiscountSelected As Integer = 0
If radioButton1.Checked = True Then
intDiscountSelected = 1
blnDiscount = True
ElseIf radioButton2.Checked = True Then
intDiscountSelected = 2
blnDiscount = True
ElseIf radioButton3.Checked = True
intDiscountSelected = 3
blnDiscount = True
End If
If intDiscountSelected = 0 Then
MsgBox("Please Select If Discount Is Available", , "You must Choose A Discount If Available")
blnDiscount = False
End If
也就是说,Plutonix的循环版本是一个更简洁的选项,可以更好地扩展。