使用3个单选按钮验证组框

时间:2016-04-20 16:43:12

标签: vb.net

我正在获取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

2 个答案:

答案 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的循环版本是一个更简洁的选项,可以更好地扩展。