2013-08-22 2 views
1

객관식 퀴즈를 만들었지 만 플레이어가 정답을 포함하는 버튼을 선택하면 BackColor가 몇 초 전에 녹색으로 바뀌도록 올바른 코드를 제시하는 데 어려움을 겪고 있습니다. 다음 질문이 자동으로 나타나고 정상적인 BackColor로 돌아갑니다.정답이 포함되어있는 경우 버튼의 배경색에서 색상을 변경하려면 어떻게해야합니까? Visual Basic 2010

또한 플레이어가 잘못된 대답이 포함 된 버튼을 선택하면 BackColor가 빨간색으로 바뀌어 플레이어에게 틀렸다고 알립니다. 이를 위해

, 나는 label 모든 물론, 단 하나 개의 존재로, 질문에 대한 잠재적 인 대답을 포함하는 요청을 받고 질문을 포함 lblQuestion, 다음 네 buttons (btnAnswerA, btnAnswerB, btnAnswerCbtnAnswerD)라고 있습니다 옳은.

언젠가는 코드를 사용하려고 노력하고 있지만 제대로 작동하지는 않지만 원하는 방식으로 작동하지 않으므로이 문제에 대한 지침이 필요합니다.

다음은이 문제와 관련된 몇 가지 코드입니다. 나는 그것을보고 확신하며, 많은 사람들이 내가 어디로 잘못 가고 있는지 알 것이다!

Private Sub btnAnswerA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerA.Click 

    If strAnswer = "A" Then 
     btnAnswerA.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerA.BackColor = Color.Red 
     Call GetQuestion(questionNumber) 
    End If 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerB.Click 

    If strAnswer = "B" Then 
     btnAnswerB.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerB.BackColor = Color.Red 
     Call GetQuestion(questionNumber) 
    End If 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerC.Click 

    If strAnswer = "C" Then 
     btnAnswerC.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerC.BackColor = Color.Red 
     Call GetQuestion(questionNumber) 
    End If 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerD.Click 

    If strAnswer = "D" Then 
     btnAnswerD.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerD.BackColor = Color.Red 
     Call GetQuestion(questionNumber) 
    End If 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

기본적으로, 난 그냥 배경색이 Call GetQuestion(questionNumber)이 어디 다음 질문을 표시하기 전에 잠시 동안 (그들은 옳고 그름있어 여부에 따라) 그린/레드 차례에 도착하는 방법을 알고있는 몇 가지 도움이 필요합니다 플레이어가 버튼을 클릭하기 전에 원래의 BackColor (회색)가 다음 질문으로 돌아가는 방법을 알고 있어야합니다.

희망이 있으시면 도움이되고 도움이 될 것입니다. 사과드립니다. 프로그래밍에 익숙하지 않습니다. 또한 더 많은 코드가 필요한 경우 제출할 것입니다. 바로 전화 GetQuestion (questionNumber)의 각 이전

System.Threading.Thread.CurrentThread.Sleep(1000) 

에서

답변

1

APrough가 지적했듯이 Call GetQuestion(questionNumber)의 직전에 Thread.Sleep 방법을 사용할 수 있습니다.

스레드가 차단 된 시간 (밀리 초)을 나타내는 millisecondsTimeout 매개 변수를 조정할 수 있습니다. 예를 들어 2 초 동안 잠 들어 :

System.Threading.Thread.CurrentThread.Sleep(2000) 

그러나,

나는 그것을 시도하지만, 무슨 일하는 녹색 버튼 색상을 변경하지 않고이 정지한다는 것이다 않았다/질문하는 동안 빨간색이 표시됩니다 레이블에 있으므로 다음 질문으로 지연되어 결국 새 대답 이 표시됩니다.당신은 당신의 코드에서 DoEvents를 호출 할 경우, 응용 프로그램이 다른 이벤트를 처리 할 수 ​​

:

그 행동의 이유는 또한 솔루션 인 Application.DoEvents 방법, 에 대해 MSDN에 설명 . 예를 들어, ListBox에 데이터를 추가하고 DoEvents를 코드에 추가하는 폼이있는 경우 다른 창이 드래그되면 폼이 다시 표시됩니다. 코드에서 DoEvents를 제거하면 단추의 클릭 이벤트 처리기가 실행을 마칠 때까지 양식이 다시 채색되지 않습니다. 난 당신이 GetQuestion 방법에 배경색을 다시 생각하기 때문에

그것은 당신을위한 일이 무엇을, 배경색은 새로 고쳐지지 않습니다. 따라서 필요한 것은 Thread.Sleep 메서드 이전에이 메서드 (Application.DoEvents)를 호출하는 것입니다.

코드는 다음과 같습니다

Private Sub btnAnswerA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerA.Click 

    If strAnswer = "A" Then 
     btnAnswerA.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerA.BackColor = Color.Red 
     'Call GetQuestion(questionNumber) no need here, it will be called after 
    End If 

    'Make sure backcolor is refreshed 
    Application.DoEvents() 

    'Wait for two second 
    System.Threading.Thread.Sleep(2000) 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerB.Click 

    If strAnswer = "B" Then 
     btnAnswerB.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerB.BackColor = Color.Red 
     'Call GetQuestion(questionNumber) no need here, it will be called after 
    End If 

    'Make sure backcolor is refreshed 
    Application.DoEvents() 

    'Wait for two second 
    System.Threading.Thread.Sleep(2000) 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerC.Click 

    If strAnswer = "C" Then 
     btnAnswerC.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerC.BackColor = Color.Red 
     'Call GetQuestion(questionNumber) no need here, it will be called after 
    End If 

    'Make sure backcolor is refreshed 
    Application.DoEvents() 

    'Wait for two second 
    System.Threading.Thread.Sleep(2000) 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 

Private Sub btnAnswerD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerD.Click 

    If strAnswer = "D" Then 
     btnAnswerD.BackColor = Color.Green 
     intScore = intScore + 100 
     lblScore.Text = intScore 
    Else 
     btnAnswerD.BackColor = Color.Red 
     'Call GetQuestion(questionNumber) no need here, it will be called after 
    End If 

    'Make sure backcolor is refreshed 
    Application.DoEvents() 

    'Wait for two second 
    System.Threading.Thread.Sleep(2000) 

    Call GetQuestion(questionNumber) 
    prgbarOne.Value = 0 

End Sub 
0

를 착용합니다. 위의 1000은 밀리 초이므로 필요한만큼 조정하십시오.

+0

내가 그 시도 않았지만, 무슨 일, 그것은 문제가 라벨에 표시됩니다 동안 적색/녹색 버튼 색상을 변경하지 않고 정지 점이다 그래서에 지연 끝 다음 질문은 새로운 답변이 표시되는 곳입니다. – KSR5

0

vb.net 타이머 컨트롤에 대한 Google 검색을 수행합니까? 단추를 클릭 한 후 타이머를 시작하고 .Tick() 이벤트를 처리하여 단추의 BG 색을 재설정하고 다음 질문을 시작하십시오. 이렇게하면 응용 프로그램이 응답하지 않고 올바르게 전환됩니다.