2016-02-16 223 views
0

我有一段代碼,我正在使用5個單選按鈕。 我有5個IF語句,每個單選按鈕。 但是,一次只能有一個活動。根據選中哪個單選按鈕來選擇文本

如何在沒有所有if語句的情況下編寫它? 該代碼是用於更新與來自貨幣計算器

If RadioAmerica.Checked Then 
    Resultbox.AppendText(CurrencyHolder.Text & " Amerikaanse dollars komen overeen met:") 
    thevalue = usdvalue 
End If 

If RadioBritish.Checked Then 
    Resultbox.AppendText(CurrencyHolder.Text & " Britseponden komen overeen met:") 
    thevalue = gbpvalue 
End If 

If RadioEuro.Checked Then 
    Resultbox.AppendText(CurrencyHolder.Text & " Euro's komen overeen met:") 
    thevalue = eurovalue 
End If 

If RadioRussian.Checked Then 
    Resultbox.AppendText(CurrencyHolder.Text & " Russische roebels komen overeen met:") 
    thevalue = rusvalue 
End If 

If RadioJapan.Checked Then 
    Resultbox.AppendText(CurrencyHolder.Text & " Japanese Yens komen overeen met:") 
    thevalue = japyenvalue 
End If 
+0

您可以使用用戶單擊RB時設置的變量,文本可能來自Tag屬性。 – Plutonix

+0

我們不知道如何改進此代碼。 「japyenvalue」或「rusvalue」這些值來自哪裏?但是,由於您對每種貨幣都有不同的文本和值,所以'If'語句是適當的。易於閱讀,測試和維護。 –

回答

1

單選按鈕表示一個項的「基團」應在容器中被分組在一起的結果的文本框中。 GroupBox控件是專門爲此目的而設計的。如果您所有的貨幣單選按鈕都不在GroupBox中,請將它們放在那裏。

然後,您可以遍歷GroupBox中的單選按鈕並查看選中哪一個。這甚至可以使用LINQ簡化:

Dim rb As RadioButton = myGroupBox.Controls.OfType(Of RadioButton) 
          .FirstOrDefault(Function(r) r.Checked = True) 

但爲了這個工作你的情況,你必須將相關數據與每個單選按鈕關聯。你可以使用Tag屬性來做到這一點。這些字符串添加到每個單選按鈕的Tag屬性,然後你可以這樣做:

Dim rb As RadioButton = myGroupBox.Controls.OfType(Of RadioButton) 
          .FirstOrDefault(Function(r) r.Checked = True) 

Resultbox.AppendText(CurrencyHolder.Text & rb.Tag.ToString()) 

不幸的是,它不適合。如果您需要將多個數據片段與每個單選按鈕相關聯,那麼您將不得不更加努力地工作。你可以:

  1. 創建一個自定義的單選按鈕類,它從內置的RadioButton類派生。在您的自定義類中,提供公開您需要的信息的屬性。然後,使用上面的代碼,但將結果轉換爲您的自定義單選按鈕類類型的對象,並使用它提供的屬性。

  2. 讓事情簡單一些,只是使用If語句。這沒有什麼害處,它是在代碼中作出決定的慣用方式,仍然可讀性強。

+0

謝謝@Cody Gray – TheBlinderCoder

1

我更喜歡關於一系列IF的case語句。Then或If .... ElseIf .... Then ...語句。

在該示例中CheckChanged事件觸發所有按鈕被鉤到一個子:

Private Sub RadioButtonX_CheckedChanged(sender As Object, e As EventArgs) _ 
Handles RadioButton5.CheckedChanged, RadioButton4.CheckedChanged, 
RadioButton3.CheckedChanged, RadioButton2.CheckedChanged, 
RadioButton1.CheckedChanged 
    Select Case sender.name 
     Case "RadioButton1" 
      Label1.Text = sender.name 
     Case "RadioButton2" 
      Label1.Text = sender.name 
     Case "RadioButton3" 
      Label1.Text = sender.name 
     Case "RadioButton4" 
      Label1.Text = sender.name 
     Case "RadioButton5" 
      Label1.Text = sender.name 
    End Select 
End Sub 

要快速鉤在一起選擇,那麼所有的控制經由屬性添加CheckChanged()事件。

如果您在.TAG屬性放置在適當的值,你可以使用相同的子:

theValue = Sender.Tag 

注意,您可以使用帶有標記屬性數據綁定。

相關問題