2017-02-11 66 views
0

こんにちは私は学校プロジェクトとして試験システムを作成しています。私はVisual Studio 2010を使用しており、バックエンドはMS Access 2007です。フォームには4つのラジオボタンと1つのボタンコマンド(NEXT)があります。VB.NETラジオボタンが選択されていない場合にメッセージボックスを表示し、次のボタンをクリックしたときにメッセージボックスをクリアする方法

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()
+0

私は本当に言うことはできませんが、私はあなたがSQLインジェクションに開放されていると思います。これで問題は解決されませんが、文字列を連結する代わりにSQLパラメータを考慮する必要があります。 – Bugs

答えて

0

私が代わりにそのinsightly If [...]ステートメントを使用して、あなたのためにそれをはるかに簡単になるだろういくつかのことを持っています!

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 

そしてまた、上記サブに次の行を追加します

私の提案は、最初にすべてのあなたのラジオボタンは「CheckChanged」イベントを処理するイベントハンドラを追加することです。 これはイベントをフィルタリングして、チェックされているRadioButtonsの1つに関係するイベントにのみフォーカスし、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 

何この(上記)(非常に徹底的であることを)やっていることは、イベントをトリガしたオブジェクトになります「送信者」を使用しています。また、4つのオブジェクトがあるので、DirectCast()を使用して汎用オブジェクトタイプを変換し、実際の内容(ラジオボタン)に戻します。

TryCast()を使用することもでき、Nothingでないことを確認するだけで、タイプを正常にキャスト(変換)したかどうかを確認するのに役立ちます。 DirectCast()について以下で説明するのと同じパラメータを使用します。

したがって、最初のパラメータは「送信者」オブジェクトを入力し、2番目は「送信者」を変換するために使用するオブジェクトの種類を使用します。だから我々は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 [...]を使用。 メッセージが表示されない場合は、メッセージを表示して[終了]をクリックして、それ以上進行しないようにします。

Then Subが終了しなかった場合は、選択したRadioButton(SelectedAnswer)をチェックしないように変更し、不要になった場合は変数をリセットします。


そして、(私は最後のsnipetに含まれていなかった)残りのコードは...年代の代わりに行くだろう。


私はあなたを助け、すべてを十分に説明することができました! もちろん、これはお勧めですので、とにかくやりたいことができます。

関連する問題