• ベストアンサー

VB2008にて4択クイズ作成

AKARI0418の回答

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

Private Question() As String = {"Web ブラウザと Web サーバーの間で Web ページなどをやり取りする際に用いられる通信プロトコルは?", _ "問2", "問3", "問4", "問5"} Private AnswerValue() As String = {"HTML,HTTP,XML,URL,1", "答え1,答え2,答え3,答え4,3", _ "答え1,答え2,答え3,答え4,3", "答え1,答え2,答え3,答え4,3", _ "答え1,答え2,答え3,答え4,3"} について説明すればもやもやも解消していただけることと思います。 配列に固定の文字列を設定しています。 今回はQuestionが問題文、AnswerValueが答えの組み合わせになります。 問題文と答えの組み合わせになりますのでどちらの変数も配列数が同じになるようにしてあります。 次は設定されている内容の説明です。 Questionは問題文がそのままの形で設定されています。 AnswerValueですが、ボタンAのTEXT,ボタンBのTEXT,ボタンCのTEXT,ボタンDのTEXT,答え(0~3,0=ボタンA,1=ボタンB) といった構成になっています。 StringクラスのSpritメソッドを使用して配列に,区切りで格納して使用しています。 その部分にご指摘のように間違いがありました。 TextBox1.Text = Question(QuestionNum(NowQuestionNum)) Dim Answers() As String = AnswerValue(NowQuestionNum).Split(",") となっていますが、同じでなければいけないはずのインデックスが異なっています。 QuestionはQuestionNum(NowQuestionNum) AnswerValueはNowQuestionNum これではだめですね。 Dim Answers() As String = AnswerValue(QuestionNum(NowQuestionNum)).Split(",") としなくてはいけませんでした。 NowQuestionNumは現在の出題数-1が記録されています。 QuestionNumは出題する順番が設定されている配列です。

test0821
質問者

お礼

回答ありがとうございます。 >配列に固定の文字列を設定しています。 今回はQuestionが問題文、AnswerValueが答えの組み合わせになります。 問題文と答えの組み合わせになりますのでどちらの変数も配列数が同じになるようにしてあります。 これは仮に変数が0の場合は1番最初の問題と1番最初の問題の選択肢が格納された部分を指すということになるんですよね。良く分かりました。 >AnswerValueですが、ボタンAのTEXT,ボタンBのTEXT,ボタンCのTEXT,ボタンDのTEXT,答え(0~3,0=ボタンA,1=ボタンB) といった構成になっています。 StringクラスのSpritメソッドを使用して配列に,区切りで格納して使用しています。 この部分も非常に分かりやすかったです。0~3とA~Dが対応して、4番目の部分に解答が格納されているわけですね。 そして、最後の説明ですが、問題と選択肢の変数のインデックスの値が違うためランダムな問題と選択肢が一致しなかったわけですね。 どの説明も非常に分かりやすく、とても参考になりました。 まだまだVBの構文やプログラム全般の知識が乏しいため、すべては理解できませんでしたが、今後プログラムを勉強しながら理解していきたいと思います。 今回は、細かな解説からサンプルプログラムまで本当にありがとうございました。 今後またお世話になることがあるかもしれませんが、その時はよろしくお願い致します。

関連するQ&A

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • VB添削

    このプログラムは 例えば3 3 4とテキストボックスに数字が打ち込まれると 3×3行列が4個分 のテキストボックスがでてきます。 ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。 以下のプログラムはできたところまで作成しています。 どこを直せばよいのでしょうか。 Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 3 AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged Next End Sub Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) With CType(sender, TextBox) .Text = .Text.Substring(0, .Text.Length - 1) .SelectionStart = .Text.Length End With End If Dim cnt1 As Integer Dim cnt2 As Integer Dim cnt3 As Integer If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then For k = 1 To cnt3 For i = 1 To cnt1 For j = 1 To cnt2 Dim tb As TextBox = New TextBox() tb.Name = "tb" + i.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 28 + 55 tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10 tb.Width = 25 Next Next Next End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Bounds = New Rectangle(10, 10, 1350, 800) Me.AutoScroll = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tb" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text) Next tb.Text = sum.ToString() Next Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub End Class

  • 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>

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

  • VBでタイピングゲーム作成

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.Text = Label1.Text Then Label1.Text = "haradamunetoki" Label2.Text = "原田宗時" TextBox1.Text = "" Else Label3.Text = "違います" Private TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End If If TextBox1.Text = Label1.Text Then Label1.Text = "katakurakojuro" Label2.Text = "片倉小十郎" TextBox1.Text = "" Else Label3.Text = "違います" End If ――最初ラベル1にはdatemasamune、ラベル2には伊達政宗と表示してあって、主に判断の基準となるのはラベル1ですが、 最初のEnd If文までの間で繰り返しのような感じになってしまっていて 次の片倉小十郎に行くことができません。 先生に話しを聞いたところ、文法をよく理解していないとのこと…。 次のif文にいくにはどうしたらいいのでしょうか?

  • PreviewKeyDownについて

     Form1にButton1とTextBox1、TextBox2、TextBox3を配置します。 TextBox2はMultiLineにします。 プログラムを実行し、1度目は4などを入れ「Enterキー」を押し、間違えます。 TextBox3には「不正解」と表示されます。 次に、textbox2に正解の3を入れ「Enterキー」を押しても「正解」とは表示されません。 私の頭では「正解」と表示されると思うのですが、どこがおかしいのでしょうか。  もう一つ、TextBox2はEnterキーを押したときの「ピン」という警告音が出ないようにMultiLineにしていますが、MultiLineにせず、警告音を消す方法はありますか。宜しくお願いいたします。  以下はコードです。 Dim Problem As String Dim RightAnswer As String Dim Answer As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load problem = "1+2=" RightAnswer = "3" End Sub Private Sub TextBox2_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox2.PreviewKeyDown If e.KeyCode = Keys.Enter Then Answer = Me.TextBox2.Text If Answer = RightAnswer Then Me.TextBox3.Text = "正解" Else Me.TextBox2.Text = "" Me.TextBox3.Text = "不正解" Me.TextBox2.Focus() End If End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.TextBox1.Text = Problem Me.TextBox2.Focus() End Sub

  • 重複した文字列をカウントして取り出したい

    初めて質問させていただきます。 VB初心者です。 ソートされた文字列の書き込まれたファイルを読み、 (文字列は、 ”000” ”001” ”001” ”001” ”002” ”002” ”003” といったように書き込まれています。) そこから、3つ連続して並んでいる文字列を探し出して、 その文字列と、3つ連続していた文字列がいくつあったのか表示するプログラムを作りたいのですが、 どうにも処理速度が遅く、さらに行数が1万を超えると、応答なしになってしまいます。 どなたか、上手い処理の方法があれば、ぜひともご教授の程をお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.FileName = "" OpenFileDialog1.InitialDirectory = "c:\" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then TextBox1.Text = My.Computer.FileSystem.ReadAllText _ (OpenFileDialog1.FileName, System.Text.Encoding.Default) End If End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim x As Integer Dim xyz As Integer '行数を調べる。 Dim i As Integer = TextBox1.Lines.Length TextBox2.Text = (i - 1 & "行") MessageBox.Show("一時停止") For ix = 0 To i - 2 '1行目と2行目を比較 If TextBox1.Lines(x) = TextBox1.Lines(x + 1) Then '2行目と3行目を比較 If TextBox1.Lines(x + 1) = TextBox1.Lines(x + 2) Then '3つある番号を記入。 TextBox2.Text = TextBox2.Text + vbCrLf + TextBox1.Lines(x + 2) '3回重複したことをカウント。 'MessageBox.Show("3発見") xyz = xyz + 1 Else End If Else End If '調べる行を+1 x = x + 1 Next TextBox2.Text = TextBox2.Text + vbCrLf + ("3つ以上は、" & xyz & "個") End Sub Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub End Class

  • VB2010 コードの意味を教えてほしいです。

    VB2010を使って、基礎から勉強中です。 テキストに紹介してあるサンプルプログラムを作っているところですが、 どうしても、わからないところがあります。 乱数を発生させ、こんばんはという文字を、5つのボタンにランダムに表示させて ボタンをクリックして、なんという言葉か当てるゲームです。 その中で、For ~ Nextの中に入力されている内容の意味を 詳しく知りたいです。よろしくお願いします。 Public Class Form1 Private answer As String = "こんばんは" '答え Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '答えを文字列の配列に変換 Dim moji() As Char = answer.ToCharArray() '文字入れ替え Dim rnd As New Random() '乱数を発生させる For i As Integer = 1 To 10 Dim n1 As Integer = rnd.Next(5) Dim n2 As Integer = rnd.Next(5) Dim m As Char = moji(n1) moji(n1) = moji(n2) moji(n2) = m Next Button1.Text = moji(0) Button2.Text = moji(1) Button3.Text = moji(2) Button4.Text = moji(3) Button5.Text = moji(4) '回答欄を初期化 Label2.Text = "" End Sub Private Sub btns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click Dim btn As Button = CType(sender, Button) Label2.Text &= btn.Text btn.Visible = False If Label2.Text = answer Then MsgBox("おめでとう", 0, "正解") ElseIf Label2.Text.Length >= answer.Length Then MsgBox("残念!", 0, "不正解") End If

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。