VB.NET如果没有选中单选按钮,如何显示消息框,并在单击下一个按钮时清除它们

时间:2017-02-11 05:03:03

标签: vb.net

嗨,我正在创建一个考试系统作为学校项目。我正在使用visual studio 2010,后端是MS Access 2007.我在表单上有4个单选按钮和1个按钮命令(NEXT)。

如果未选中所有4个单选按钮,如何显示消息框?此外,如果选择了4个单选按钮中的一个,则应将答案插入数据库,当单击下一个按钮以继续下一个问题时,应清除单选按钮。

我现在的代码如下所示:如果我选中radiobtnA答案A将被插入数据库,当我点击下一个按钮时,单选按钮将全部清除。

enter image description here

以下是我的代码:

Private Sub nxtBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nxtBTN.Click Dim EQcorrAnswer As Integer = 0 Dim strAnswer As String = "" If radiobtnA.Checked = True Then strAnswer = "A" radiobtnA.Checked = False If radiobtnB.Checked = True Then strAnswer = "B" radiobtnB.Checked = False If radiobtnC.Checked = True Then strAnswer = "C" radiobtnC.Checked = False If radiobtnD.Checked = True Then strAnswer = "D" radiobtnD.Checked = False If corrAnsTB.Text = strAnswer Then EQcorrAnswer = 1 intcorrAnswer += 1 End If ExecNonQuery("UPDATE Examinee SET score = " & intcorrAnswer & " AND timefin ='" & timetxt.Text & "' AND datetaken ='" & TXTDate.Text & "' Where tempID = '" & tempIDTB.Text & "'") Try ExecNonQuery("INSERT INTO ExamResult (tempID,QuestionID,answer,correct) VALUES('" & tempIDTB.Text & "','" & questIDTB.Text & "','" & strAnswer & "'," & EQcorrAnswer & ")") If inc <> maxrows - 1 Then inc = inc + 1 navigaterecords()

1 个答案:

答案 0 :(得分:0)

我有一些事情可以让你更容易,而不是使用那个明确的If [...]声明!

我的建议是首先添加一个处理&#39; CheckChanged&#39;的事件处理程序。所有RadioButtons的事件:

Dim SelectedAnswer As RadioButton = Nothing
Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButtonA.CheckedChanged, RadioButtonB.CheckedChanged, RadioButtonD.CheckedChanged, RadioButtonC.CheckedChanged

End Sub

并在上面的Sub中添加以下内容。 这将过滤事件,因此它只关注涉及其中一个被检查的RadioButtons而不是UnChecked的事件。

    If DirectCast(sender, RadioButton).Checked Then
        SelectedAnswer = DirectCast(sender, RadioButton)
        strAnswer = SelectedAnswer.Name.Substring(8, 1)
        'And potentially anything else you wanted to add could go here
    Else
        SelectedAnswer = Nothing
        'Or here
    End If

这(上面)正在做什么(非常彻底)是使用&#39;发件人&#39;这将是触发事件的对象。由于我们有4个对象,我们使用DirectCast()来转换它给我们回到它实际上的通用对象类型(单选按钮)。

也可以使用TryCast(),并且可以通过检查确定它是否Nothing来检查它是否成功地转换(或转换)了类型。它使用与我将在下面解释的DirectCast()相同的参数。

因此,对于第一个参数,我们输入了对象&#39;发送者&#39;第二,我们使用我们想要用来转换&#39;发送者&#39;至。所以我们使用RadioButton。

由于我们不希望任何其他类型触发此事件,因此我们可以毫无问题地使用DirectCast()。

现在为您提供的按钮点击活动:

Dim strAnswer As String = ""
Private Sub nxtBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nxtBTN.Click
    If SelectedAnswer = Nothing Then
        MessageBox.Show("Nothing selected, silly :p")
        Exit Sub
    End If
    Dim EQcorrAnswer As Integer = 0
    SelectedAnswer.Checked = False
    SelectedAnswer = Nothing

    If corrAnsTB.Text = strAnswer Then
        EQcorrAnswer = 1
        intcorrAnswer += 1
    End If
    ...
    ...
End Sub

我使用If [...]检查是否有实际选择的答案。 如果没有,则显示消息并退出Sub以阻止它继续前进。

然后如果Sub没有退出,请将选定的RadioButton(SelectedAnswer)更改为未选中,如果我们不再需要它,请重置该变量。

然后剩下的代码(我没有包含在最后一个snipet中)代替...

希望我能够帮助你,并解释一切! 当然这是一个建议,所以无论如何你都可以这样做。