質問:4択問題のプログラムでランダムに出題する処理で困っています

このQ&Aのポイント
  • 質問者は、4択の問題を解答し、最後に正解数を表示するプログラムを作成しているが、ランダムに出題しつつ同じ問題が出題されないようにする方法について困っている。
  • データテーブルに問題と選択肢、解答、正解を格納し、最終的な目標は300問の問題からランダムに100問出題して結果を表示するプログラムを作成したいということ。
  • 現在は10問で動くプログラムを作成しており、NextQuestion_Click関数を使用して次の問題に進む処理を実装している。
回答を見る
  • ベストアンサー

4択問題のプログラムでランダムに出題する処理で困っています

現在私は画像のような4択の問題を解答し最後に何問正解していたかを表示するプログラムを作成しています。 解答を選択して「次の問題」ボタンをクリックすれば次の問題に移行する・・・というような流れです。 データテーブルに「問題(Question)」「選択肢(Answer1~4)」「解答(SelectAnswr)」「正解(CorrectAnswer」「正解の解説(Explanation)*今質問中では使用させません」を格納しています。 最終的な目標はデータテーブルに問題を300問用意しその中からランダムに100問出題して最後に結果を表示するプログラムを作成することです。 今どうすればランダムに出題しつつ同じ問題が出題されないようにするプラグラムを組めばいいのか壁にぶつかっています。 下記が「次の問題」ボタンのプログラムです。 Private Sub NextQuestion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextQuestion.Click ' i が -1 のとき(つまり、初回のクリック) If i = -1 Then '選択肢を選択可能にする GroupBox1.Enabled = True 'NextQuestionのテキスト変換 NextQuestion.Text = "次の問題" ' i が -1以外のとき(つまり、回答後のクリック) Else '正誤確認 If Answer1.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ア" ElseIf Answer2.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "イ" ElseIf Answer3.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ウ" ElseIf Answer4.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "エ" End If If DataSet1.DataTable1(i).SelectAnswer = DataSet1.DataTable1(i).CorrectAnswer Then total = total + 1 End If End If i += 1 ' i をインクリメント(出題を次に進める) ' i が10になった = 回答が10問終わった If i = 10 Then MsgBox("あなたの正解数は10門中" & total & "問です!") Me.Close() Else '問題の読み込み Question.Text = DataSet1.DataTable1(i).Question Answer1.Text = DataSet1.DataTable1(i).Answer1 Answer2.Text = DataSet1.DataTable1(i).Answer2 Answer3.Text = DataSet1.DataTable1(i).Answer3 Answer4.Text = DataSet1.DataTable1(i).Answer4 'ラジオボタンを初期位置に戻す Answer1.Checked = True End If End Sub *変数iはPublicで宣言しています。 *最終目標は100問出題なのですが今は10問で動くプログラムを作成しています。 わかるかたがいましたら知恵をかしてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8519/19367)
回答No.1

まず「次の問題に進む時、問題の参照にiを使わず、乱数で求めた0~299の値を使う」と言うように変更しましょう。 そして「初期化時や無回答で次の問題に進んだ時の、解答(SelectAnswr)にセットする値を工夫する事で、未出題か出題済みか判定する」と言う処理をして、問題の重複を避けましょう。 ヒントだけ。 ヒントは以下の通り。 ヒント1. 「解答(SelectAnswr)」に入る値を「回答された"ア"~"エ"」「無回答でスキップした"S"」「まだ出題してない""」の3種類にする。 (無回答でのスキップが出来ない、つまり、選択肢のどれかを選ばないと「次の問題」ボタンが押せない、と言う処理の場合「無回答でスキップした"S"」は不要) ヒント2. 最初の初期化時に「300件全部、解答(SelectAnswr)の値を""にして、すべて未出題」にする。 ヒント3. 出題時に問題を参照する時「DataSet1.DataTable1(i).ほげほげ」のように「(i)」で参照するのをやめる。 代わりに、乱数で「解答(SelectAnswr)の値が、まだ出題してない""になっている問題」を探す。 つまり「乱数で0~299の値を作り、解答(SelectAnswr)の値が""なら、その乱数が出題番号になり、解答(SelectAnswr)の値が""じゃないなら乱数の作り直し」をすればよい。 ヒント4. 変数の「i」は「最初は-1」「1題出題するごとに1を足す」「100題目が終わったら終了」の目的以外には使わない。 つまり「DataSet1.DataTable1(i).ほげほげ」っていう書き方を全部無くす。 ヒント5. 選択肢を選ばずに「次の問題」を押してしまった場合「解答(SelectAnswr)」の値が「まだ出題してない""」のまま次に進んでしまっては困るので、次に進む前に「解答(SelectAnswr)の値を"S"にする」と言う処理をして「出題済み」にする。 (無回答でのスキップが出来ない、つまり、選択肢のどれかを選ばないと「次の問題」ボタンが押せない、と言う処理の場合、この処理は不要) ヒントは以上。 なお、この方法は「300問中100問」などのように、最後の100問目に近い時も未出題の問題が多い場合は問題ありませんが「すべての問題を出題する」などの場合、最後の問題に近くなると未出題の問題が減り「残りの問題が乱数にヒットせず、次の問題に進む際に時間がかかる」と言う欠点があるので注意して下さい。今回のように「300問中100問」であれば問題はありません。

ryousuke33
質問者

お礼

とても助かりました。ありがとうございます。

その他の回答 (5)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

BindingSourceは使い勝手が悪いかも ・・・ BindingSourceがユーザーに見えてしまっていると問題の移動自体が自由に行えてしまいます これは抑制したほうがいいように思います CurrnecyManagerを導入してこれで出題位置を特定したほうがいいように思います 300問中100問出題などとするのであれば DataTableに問題,回答選択子,正解などのほかに 出題順序用のフィールドを設けて この出題順序フィールドに乱数を代入しソートした結果を使って見てはいかがでしょう

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

訂正 問題文=worksheets("問題シート").cells(問題番号,2) worksheets("問題シート").cells(問題番号,1)=1 あら、余計だったかな

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

問題は「300問の中から重複無く問題を選ぶ」ということだと解釈します。 300問の問題はどこかのシートに書かれているはずですね。 一部しかコードは書きませんが、 初期化でその空いている列をクリアーする。A列とする その後問題を選ぶたびに過去に出したかチェックする '問題選択 問題番号=選択番号() 問題文=worksheets("問題シート").cells(選択番号,2) worksheets("問題シート").cells(選択番号,1)=1 Function 選択番号() As Integer   Dim ix1 As Integer   Randomize     ix1 = Int((Rnd * 10) + 1)   While worksheets("問題シート").Cells(ix1, 1) = 1     ix1 = Int((Rnd * 10) + 1)   Wend   選択番号=ix1 End Function

  • tochansa
  • ベストアンサー率76% (23/30)
回答No.3

あああ! chie65535さんごめんなさい・・・m(__)m せっかくのヒントなのに邪魔してしまいました。

  • tochansa
  • ベストアンサー率76% (23/30)
回答No.2

問題の入ってるデータテーブルってPublicなものですか? そうであるならば、「既に使用した(Used)」というような列を作って、 Private Sub NextQuestion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextQuestion.Click ' 前の問題の答え合わせや、いろんな処理(割愛します) Dim rnd As New Random Dim Qindex As Intege while ' データテーブルから問題の番号を選ぶ処理 Qindex = rnd.Next(0, 300) ' 選んだ問題が既に使用されたものかチェック if DataSet1.DataTable1(i).used = 0 then ' 初めて使要する問題ならループを抜ける DataSet1.DataTable1(i).used = 1 exit loop end if loop End sub こんな感じでしょうか?動作確認して無いので不備はあるかもです。

関連するQ&A

  • 4択問題のプログラムで「次の問題」に移行する処理で困っています

    現在私は画像のような4択の問題のを解答し最後に何問正解していたかを表示するプログラムを作成しています。 データテーブルに「問題(Question)」「選択肢(Answer1~4)」「解答(SelectAnswr)」「正解(CorrectAnswer」「正解の解説(Explanation)*今質問中では使用させません」を格納しています。 画像はプログラムを立ち上げた直後のものです。 「次の問題」ボタンをクリックするとデータテーブルに格納された問題、選択肢が表示され順次解答をしていくのですが今現在の「次の問題」ボタンのプログラムではデータテーブルの「解答」と「正解」に1つずれが生じてしまいます。 「解答」に一番最初に格納されているのが毎回「ア」になってしまいます。 下記に「次の問題」ボタンのプログラムを示します。 Private Sub NextQuestion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextQuestion.Click '選択肢を選択可能にする GroupBox1.Enabled = True Question.Text = DataSet1.DataTable1(i).Question Answer1.Text = DataSet1.DataTable1(i).Answer1 Answer2.Text = DataSet1.DataTable1(i).Answer2 Answer3.Text = DataSet1.DataTable1(i).Answer3 Answer4.Text = DataSet1.DataTable1(i).Answer4 '正誤確認 If Answer1.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ア" ElseIf Answer2.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "イ" ElseIf Answer3.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ウ" ElseIf Answer4.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "エ" End If If DataSet1.DataTable1(i).SelectAnswer = DataSet1.DataTable1(i).CorrectAnswer Then total = total + 1 End If i = i + 1 '終了 If 10 = i Then MsgBox("あなたの正解数は10門中" & total & "問です!") Me.Close() End If Answer1.Checked = True End Sub *変数iはPublicで宣言しています。 このバグを解消するのに4日ぐらい四苦八苦しているのですが限界が近いです。 知恵をかしてください。おねがいします。

  • バグがとけません・・・

    現在私はVB2005で4択のクイズ形式のプログラムを作成しています。 データセットに問題、解答群などを格納しています。 それをフォームで表示してラジオボタンで4択のなかから正解と思うものを1つ選びボタンをクリックして次の問題へ移行する・・・というような流れのプログラムです。 今ためにしに問題を十問出題し最後の問題を終えたら10問中何問正解したかを表示するプログラムを作成しています。 データセットの内容はそれぞれ下記のとおりです。 Answer1~4・・・選択肢1~4 SelectAnswer・・・選択した選択肢を格納する CorrectAnswer・・・予めデータセットに格納してある正解 Loadで最初の一問目だけを読み込んで後はボタンを押すごとに問題が進んでいきますが全問正解するようにしても結果表示が正しく表示されません。 どこがバグかわかる方、もしくはさらに効率のいいコードがわかる方がいましたら助けてください。どうかよろしくお願いしますm(_ _)m Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IO.File.Exists(filePath) Then DataSet1.ReadXml(filePath) End If Question.Text = DataSet1.DataTable1(i).Question Answer1.Text = DataSet1.DataTable1(i).Answer1 Answer2.Text = DataSet1.DataTable1(i).Answer2 Answer3.Text = DataSet1.DataTable1(i).Answer3 Answer4.Text = DataSet1.DataTable1(i).Answer4 '正誤確認 If Answer1.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ア" ElseIf Answer2.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "イ" ElseIf Answer3.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ウ" ElseIf Answer4.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "エ" End If If DataSet1.DataTable1(i).SelectAnswer = DataSet1.DataTable1(i).CorrectAnswer Then total = total + 1 End If i = i + 1 End Sub Private Sub NextQuestion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextQuestion.Click 'Static i As Integer = 0 'UStatic total As Integer = 0 'MsgBox(i)デバッグ '問題の読み込み Question.Text = DataSet1.DataTable1(i).Question Answer1.Text = DataSet1.DataTable1(i).Answer1 Answer2.Text = DataSet1.DataTable1(i).Answer2 Answer3.Text = DataSet1.DataTable1(i).Answer3 Answer4.Text = DataSet1.DataTable1(i).Answer4 '正誤確認 If Answer1.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ア" ElseIf Answer2.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "イ" ElseIf Answer3.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "ウ" ElseIf Answer4.Checked = True Then DataSet1.DataTable1(i).SelectAnswer = "エ" End If If DataSet1.DataTable1(i).SelectAnswer = DataSet1.DataTable1(i).CorrectAnswer Then total = total + 1 End If '終了 If i = 10 Then MsgBox("あなたの正解数はは10門中" & total & "問です!") Me.Close() End If i = i + 1 Answer1.Checked = True End Sub

  • 条件判断について教えて下さい。

    VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。

  • if文からcase文への置き換え

    ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

  • CheckBoxがTrueの場合に表示をさせるには?

    VB2008を使用しています。 3つのCheckBox1~3とそれに対応した3つのTextBox1~3を準備し、 Buttonを押すとCheckBoxがTrueのものだけをRichTextBox1に表示 させたくて下記のプログラムを作成しました。 しかしCheckBox1とCheckBox3については上手く作動するのですが CheckBox2について不具合が発生します。 (不具合) CheckBox1=TrueでButtonを押すとRichTextBox1にTextBox1を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox1. TextBox3と表示。 ここまでは良いのですが、 CheckBox2=TrueでButtonを押すとRichTextBox1にTextBox2を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox2. TextBox2.TextBox3と表示されてしまいTextBox2の内容が重複して しまいまいます。 何か良い解決策がありましたら教えて下さい。 よろしくお願いいたします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click     If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If     If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "."     End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text     End If If Me.CheckBox3.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "." End If RichTextBox1.Text = RichTextBox1.Text & TextBox3.Text End If End Sub

  • ファイルコピーで更新日時が変わってしまう。

    XP pro + Visual Basic 2008 で、ファイルをバックアップするためのソフトを作ろうとしています。 ListViewを二つ用意して、それぞれに対象となるフォルダー内のファイルを表示、チェックリストにチェックしたファイルを、互いのフォルダーにコピーする。のようなものを作っています。 しかしListView1からListView2へコピーを行うと、どういうわけか更新日時が数秒づれてコピーされてしまいます。逆の場合はづれが起こらないようです。 原因&解決法を教えてください。 コードは以下の通りです。    Dim i As Integer    Dim response As MsgBoxResult    i = 0    response = MsgBox("リスト1の選択ファイルをコピーしますか?", MsgBoxStyle.YesNoCancel, "確認")    If response = MsgBoxResult.No Then       GoTo CopyRist2    ElseIf response = MsgBoxResult.Cancel Then       Exit Sub    End If    Do Until i >= ListView1.Items.Count       If ListView1.Items(i).Checked = True Then          My.Computer.FileSystem.CopyFile(フォルダ1のパス & "\" & ListView1.Items(i).Text, _             フォルダ2のパス & "\" & ListView1.Items(i).Text, True)          ListView1.Items.RemoveAt(i)       Else          i = i + 1       End If    Loop CopyRist2:    i = 0    response = MsgBox("リスト2の選択ファイルをコピーしますか?", MsgBoxStyle.YesNoCancel, "確認")    If response = MsgBoxResult.No Then       Exit Sub    ElseIf response = MsgBoxResult.Cancel Then       Exit Sub    End If    Do Until i >= ListView2.Items.Count       If ListView2.Items(i).Checked = True Then          My.Computer.FileSystem.CopyFile(フォルダ2のパス & "\" & ListView2.Items(i).Text, _             フォルダ1のパス & "\" & ListView2.Items(i).Text, True)          ListView2.Items.RemoveAt(i)       Else          i = i + 1       End If    Loop 以上です。 よろしくお願いします。

  • RichTextBoxに代入されたTextBoxの数を表示

    VB2008を使用しています。現在、10個のTextBoxとそれに対応するCheckBoxを作成し、チェックの入ったTextBox内の文字をRichTextBoxに代入するプログラムを作成しています。そこでRichTextBoxに代入されたTextBoxの数を別のTextBoxに表示させたいのですが何か良い方法はありますでしょうか?現在、下記のようにコードを組んであります。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text ・ ・ ・ If Me.CheckBox10.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox10.Text End If

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

  • モジュールを使ってフラグを作成

    Form1に問題をつくりラジオボタンでチェックできるようにして、Form2にチェックした内容の解答を表示させるプログラムを作りましたが、モジュール内でフラグを立てて、チェックをおこなう方法がわからないので、教えていただけませんか。 Form1 Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click If Option1.Checked = True Then '鼻の長い動物 Form2.Label1.Text = "象です。" ElseIf Option2.Checked = True Then '首の長い動物 Form2.Label1.Text = "きりんです。" ElseIf Option3.Checked = True Then '足の速い動物 Form2.Label1.Text = "チーターです。" Else End If Form2 Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click Form2.Show() Me.Hide()

  • VB2010で4択問題

    正確に言うとVisual Studio 2010でVBを使ってWeb上での4択問題をやろうと思ってます。 こちらを使おうと思ってます。 http://www.microsoft.com/Japan/msdn/archive/student/challengev2/chap2_vb/default.aspx 10問をランダムに出題し、正解数を表示させたいのですが、どのようにコーディングしたらよろしいのでしょうか? なお1問だけのもののサンプルは以下です。 よろしくお願いいたします。 <script runat=server> '正解のボタンを表す変数を定義 Dim Answer As Button Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) ' 問題の番号を設定する No.Text = "1" ' 問題文を設定する TextBox1.Text = "Web ブラウザと Web サーバーの間で Web ページなどをやり取りする際に用いられる通信プロトコルは?" ' 回答の選択肢を設定する ButtonA.Text = "HTML" ButtonB.Text = "HTTP" ButtonC.Text = "XML" ButtonD.Text = "URL" ' 正解のボタンを設定する Answer = ButtonB End Sub Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) ' 押されたボタンが正解のボタンかどうか調べる Dim senderButton As Button = CType(sender, Button) If senderButton.UniqueID = Answer.UniqueID Then ' 正解なので正解の絵を表示する Image1.ImageUrl = "correct.gif" Else ' 不正解なので不正解の絵を表示する Image1.ImageUrl = "wrong.gif" End If Image1.Visible = True ' 正解のボタンを赤くする Answer.BackColor = System.Drawing.Color.Red End Sub </script>

専門家に質問してみよう