嗨,我正在创建一个考试系统作为学校项目。我正在使用visual studio 2010,后端是MS Access 2007.我在表单上有4个单选按钮和1个按钮命令(NEXT)。
如果未选中所有4个单选按钮,如何显示消息框?此外,如果选择了4个单选按钮中的一个,则应将答案插入数据库,当单击下一个按钮以继续下一个问题时,应清除单选按钮。
我现在的代码如下所示:如果我选中radiobtnA
答案A将被插入数据库,当我点击下一个按钮时,单选按钮将全部清除。
以下是我的代码:
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()
答案 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中)代替...
。
希望我能够帮助你,并解释一切! 当然这是一个建议,所以无论如何你都可以这样做。