我想用 Visual Studio 做一個關于我的小測驗。我的目標是有 10 個問題和 4 個選擇。我試圖堆疊按鈕,然后在不同的時間更改 10 個標簽,但它變得有點復雜……使用陣列或/和回圈如何使這更有效?這就是我所擁有的
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.WindowState = FormWindowState.Maximized
Form1.Visible = False
Button2.Visible = False
Button3.Visible = False
Button4.Visible = False
Button5.Visible = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadioButton4.Checked = True Then
Label3.Text = "1/10"
Label4.Text = "Nice! That was Correct!
Great job!"
Label4.ForeColor = Color.LimeGreen
End If
If Label3.Text = "1/10" Then
Button2.Visible = True
End If
If RadioButton1.Checked = True Or RadioButton2.Checked = True Or RadioButton3.Checked = True Then
Label4.ForeColor = Color.DarkRed
Label4.Text = "Oh no! that was incorrect!
Try Again!"
End If
Button2.Text = "next"
End Sub
Private Sub Button2_click(sender As Object, e As EventArgs) Handles Button2.Click
Label1.Text = "What is Luke Lopez's favorite color?"
RadioButton4.Checked = False
RadioButton1.Text = "Purple"
RadioButton2.Text = "Burgundy"
RadioButton3.Text = "Turqoise"
RadioButton4.Text = "Brown"
If RadioButton1.Checked = True Then
Label3.Text = "2/10"
Label4.Text = "Nice! That was Correct!
Great job!"
Label4.ForeColor = Color.LimeGreen
End If
If Label3.Text = "2/10" Then
Button4.Visible = True
End If
If RadioButton3.Checked = True Or RadioButton2.Checked = True Or RadioButton4.Checked = True Then
Label4.ForeColor = Color.DarkRed
Label4.Text = "Oh no! that was incorrect!
Try Again!"
End If
Button2.Text = "check"
Button4.Text = "next"
If Label3.Text = "2/10" Then
Button3.Text = "next"
Button4.Text = "Check"
End If
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Button3.Visible = False
Label1.Text = "What is Luke Lopez's shoe size?"
RadioButton1.Checked = False
RadioButton1.Text = "7"
RadioButton2.Text = "8.5"
RadioButton3.Text = "7.5"
RadioButton4.Text = "8"
Button3.Visible = False
If RadioButton2.Checked = True Then
Label3.Text = "3/10"
Label4.Text = "Nice! That was Correct!
Great job!"
Label4.ForeColor = Color.LimeGreen
End If
If Label3.Text = "3/10" Then
Button5.Visible = True
Button4.Visible = False
Button3.Visible = False
Button2.Visible = False
Button1.Visible = False
End If
If RadioButton1.Checked = True Or RadioButton4.Checked = True Or RadioButton3.Checked = True Then
Label4.ForeColor = Color.DarkRed
Label4.Text = "Oh no! that was incorrect!
Try Again!"
End If
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
End Sub
這是我的前三個問題,所有的按鈕、標簽和單選按鈕都在檢查和更改每次點擊,但我需要這樣做更有效率,因為我不想在這個迷你專案上浪費大量時間和計算機記憶體。
uj5u.com熱心網友回復:
您可以將問題、選項和答案保存到資料庫中,然后將它們讀取到資料表中,每次要顯示問題時,只需使用資料表中的資料行即可。這意味著您無需編輯以下問題:

使用'Label.TextChanged' 事件處理 'Label3.Text':
Private Sub Label3_TextChanged(sender As Object, e As EventArgs) Handles Label3.TextChanged
Select Case Label3.Text
Case "1/10"
Button2.Visible = True
Case "2/10"
Button4.Visible = True
Button3.Text = "next"
Button4.Text = "Check"
Case "3/10"
...
...
End Select
End Sub
使用“If ... Else ...”陳述句。例如:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'...
If RadioButton1.Checked = True Then
Label3.Text = "2/10"
Label4.Text = "Nice! That was Correct! Great job!"
Label4.ForeColor = Color.LimeGreen
Else
Label4.ForeColor = Color.DarkRed
Label4.Text = "Oh no! that was incorrect! Try Again!"
End If
'If RadioButton3.Checked = True Or RadioButton2.Checked = True Or RadioButton4.Checked = True Then
' Label4.ForeColor = Color.DarkRed
' Label4.Text = "Oh no! that was incorrect! Try Again!"
'End If
'...
End Sub
uj5u.com熱心網友回復:
在評論中,我談到了將資料存盤在文本檔案中。這就是我的文本檔案的樣子。每條記錄都在一行上,每個欄位由管道字符 | 分隔。我選擇了一個管道,因為在你的問題和答案的文本中不會有任何那個字符。
1|Largest planet?|Jupiter|Venus|Saturn|Mars|1
2|Smallest planet?|Earth|Uranus|Mercury|Neptune|3
3|Comes closest to Earth?|Mars|Venus|Mercury|Jupiter|2
4|What planet is called the red planet?|Venus|Mars|Saturn|Neptune|2
5|What planet is furthest from Earth?|Saturn|Jupiter|Uranus|Neptune|4
6|How many planets in our solar system?|7|8|9|10|2
7|How many planets between Earth and Sun?|1|2|3|4|2
8|Which planet is said to have rings?|Jupiter|Uranus|Saturn|Neptune|3
您一直在使用類,因為 aForm是一個類。類可以具有屬性、方法和事件等。現在上課,QuestionAnswer。屬性非常簡單。在Sub New創建類和使用引數的新實體來設定類的所有屬性。
在Form.Load FillQuestionList被稱為。此方法使用File類 in System.IO(需要為此添加一個Imports)。ReadAllLines回傳檔案中所有行的陣列。我們可以遍歷這些行,然后將每一行拆分為欄位。c后面的一點"|"告訴編譯器你打算一個Char不是String. 現在,我們可以呼叫Sub New的QuestionAnswer從線的部分提供的所有屬性。然后將這個新實體添加到 中,QuestionList以便我們可以在程式中使用它。
接下來,Load事件呼叫DisplayQuestion. 該方法也將從btnNext點擊事件中呼叫。我們從表單級別變數中獲取我們想要顯示的索引CurrentQuestionIndex。看看這個類是多么方便地設定我們需要的值。回圈遍歷所有單選按鈕,清除Tag最后一個問題并清除檢查。該檔案提供了正確答案的編號。這存盤在單選按鈕的Tag屬性中。
當用戶單擊時,btnAnswer我們會獲得選擇了哪個單選按鈕并檢查Tag屬性以查看答案是否正確。如果是,增加Score并顯示分數。
btnNext.Click在增加索引并顯示下一個問題之前,簡單地檢查我們是否已經到達串列的末尾。
Public Class QuestionGame
Private QuestionList As New List(Of QuestionAnswer)
Private CurrentQuestionIndex As Integer
Private Score As Integer
Private Sub QuestionGame_Load(sender As Object, e As System.EventArgs) Handles MyBase.Load
FillQuestionList()
DisplayQuestion()
End Sub
Private Sub DisplayQuestion()
Dim QA = QuestionList(CurrentQuestionIndex)
lblQuestion.Text = QA.Question
RadioButton1.Text = QA.Answer1
RadioButton2.Text = QA.Answer2
RadioButton3.Text = QA.Answer3
RadioButton4.Text = QA.Answer4
For Each rb In Controls.OfType(Of RadioButton)
rb.Tag = ""
rb.Checked = False
Next
Select Case QA.Correct
Case 1
RadioButton1.Tag = "Correct"
Case 2
RadioButton2.Tag = "Correct"
Case 3
RadioButton3.Tag = "Correct"
Case 4
RadioButton4.Tag = "Correct"
End Select
End Sub
Private Sub FillQuestionList()
Dim lines = File.ReadAllLines("C:\Users\xxxxxxxx\Questions.txt")
For Each line In lines
Dim parts = line.Split("|"c)
QuestionList.Add(New QuestionAnswer(CInt(parts(0)), parts(1), parts(2), parts(3), parts(4), parts(5), CInt(parts(6))))
Next
End Sub
Private Sub btnAnswer_Click(sender As Object, e As EventArgs) Handles btnAnswer.Click
Dim rb = Controls.OfType(Of RadioButton)().FirstOrDefault(Function(r) r.Checked = True)
If rb IsNot Nothing AndAlso rb.Tag.ToString = "Correct" Then
Score = 1
lblScore.Text = Score.ToString
MessageBox.Show("Correct!")
btnAnswer.Enabled = False 'The user can't increase his score by clicking answer several times
Else
MessageBox.Show("Sorry, wrong answer")
End If
btnNext.Enabled = True
End Sub
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
btnNext.Enabled = False 'user can't move to next question until he answers current question
If CurrentQuestionIndex = QuestionList.Count - 1 Then
MessageBox.Show("This is the last question")
Else
CurrentQuestionIndex = 1
DisplayQuestion()
End If
End Sub
End Class
Public Class QuestionAnswer
Public Property QuestionNumber As Integer
Public Property Question As String
Public Property Answer1 As String
Public Property Answer2 As String
Public Property Answer3 As String
Public Property Answer4 As String
Public Property Correct As Integer
Public Sub New(Num As Integer, Ques As String, Ans1 As String, Ans2 As String, Ans3 As String, Ans4 As String, Cor As Integer)
QuestionNumber = Num
Question = Ques
Answer1 = Ans1
Answer2 = Ans2
Answer3 = Ans3
Answer4 = Ans4
Correct = Cor
End Sub
End Class
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385446.html
上一篇:當玩家與另一個物體碰撞并按下按鍵時,有沒有辦法添加點數?
下一篇:檢查表格視圖單元格完全可見
