Solved

There must be a more efficient way to varify if the correct radio button has been selected.

Posted on 2008-10-11
6
154 Views
Last Modified: 2010-04-23
There must be a more efficient way of verifying if the correct radio button has been selected. Any suggestions?
Private Sub btbOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btbOK.Click
 
        Dim BoardForm As New frmQuestion
 
        If RB1.Tag = m_CorrectAnswer Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("Sorry", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        If RB2.Tag = m_CorrectAnswer Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("That is Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("That is wrong!", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        If RB3.Tag = m_CorrectAnswer Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("That is Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("That is wrong!", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        If RB4.Tag = m_CorrectAnswer Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("That is Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("That is wrong!", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        Me.Close()
    End Sub

Open in new window

0
Comment
Question by:98fatboyrider
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 42

Expert Comment

by:dqmq
ID: 22694379
First, below I show some (trivially) more efficient code.  Perhaps more importantly, it's more concise and to the point.

Second, you may want to consider putting the radio buttons in an option group.  The benefits are that you can reduce the OK button to a single test:
   If OptionGroup = m_correctAnswer
         Msgbox "correct"
   Else
         Msgbox "wrong"
   end if

Also, when one is selected the others will automatically go unselected so you don't have to manage that in code.


   If RB1.Tag = m_CorrectAnswer
or RB2.Tag = m_CorrectAnswer 
or RB3.Tag = m_CorrectAnswer 
or RB4.Tag = m_CorrectAnswer 
or RB5.Tag = m_CorrectAnswer  
Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("Sorry", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If

Open in new window

0
 

Author Comment

by:98fatboyrider
ID: 22694423
When using the code above, I'm getting syntax errors on all the "or" and "then". This is vb.net if that helps.
0
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 22694507
Well...you can use the UnderScore "_" character as a line continuation flag, or put it all on the same line.

I would also use "OrElse" instead of "Or" so that it short-circuits at the first match and doesn't need to check the rest of the RadioButtons.

So like this:

    If RB1.Tag = m_CorrectAnswer _
    OrElse RB2.Tag = m_CorrectAnswer _
    OrElse RB3.Tag = m_CorrectAnswer _
    OrElse RB4.Tag = m_CorrectAnswer _
    OrElse RB5.Tag = m_CorrectAnswer _
    Then

Or like this:
    Private Sub btbOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btbOK.Click
        If RB1.Tag = m_CorrectAnswer OrElse RB2.Tag = m_CorrectAnswer OrElse RB3.Tag = m_CorrectAnswer OrElse RB4.Tag = m_CorrectAnswer OrElse RB5.Tag = m_CorrectAnswer Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("Sorry", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        Me.Close()
    End Sub

Open in new window

0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 22694553
You can use a custom control like this:
http://www.codeproject.com/KB/combobox/RadioListBoxDotNetVersion.aspx
It simultates a radio button collection and you can retrieve in one step with SelectedIndex
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 22694575
Pretty cool control jaime...  =)

Another generic option is to iterate over the range of names you want to check and find the control on the form.

I wouldn't say this is more "efficient" than hard coding if the radiobuttons are static but I thought I would present it anyways since it has many uses:
(this version is for VB.Net 2005 or above)
    Private Sub btbOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btbOK.Click
        Dim correct As Boolean = False
        For i As Integer = 1 To 5
            Dim matches() As Control = Me.Controls.Find("RB" & i, True)
            If matches.Length > 0 AndAlso TypeOf matches(0) Is RadioButton Then
                If matches(0).Tag = m_CorrectAnswer Then
                    correct = True
                    Exit For
                End If
            End If
        Next
 
        If correct Then
            PlayerTotal = (m_sender * 200) + PlayerTotal
            MessageBox.Show("Correct!", "Correct", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            MessageBox.Show("Sorry", "Wrong", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        Me.Close()
    End Sub

Open in new window

0
 

Author Closing Comment

by:98fatboyrider
ID: 31505319
Thanks for the help.
0

Featured Post

Business Impact of IT Communications

What are the business impacts of how well businesses communicate during an IT incident? Targeting, speed, and transparency all matter. Find out more in this infographic.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question