2014-03-18 34 views
5

此代碼太重複!我必須重寫這個代碼到二十!你們能幫我把這個轉變成一個只能從textbox1移動到2到3等的循環嗎?將此重複語句變爲循環

If CheckBox1.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox1.Text & Environment.NewLine) 
    End If 
    If CheckBox2.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox2.Text & Environment.NewLine) 
    End If  If CheckBox1.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox1.Text & Environment.NewLine) 
    End If 
    If CheckBox2.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox2.Text & Environment.NewLine) 
    End If 
    If CheckBox3.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox3.Text & Environment.NewLine) 
    End If 
    If CheckBox4.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox4.Text & Environment.NewLine) 
    End If 
    If CheckBox5.Checked = True Then 
     frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
     frmLunchBoxMenu.txtOrder.AppendText(frmLunchBoxMenu.LineNumber.ToString + ".) An order of " + CheckBox5.Text & Environment.NewLine) 
    End If 

這個工作,感謝幫助傢伙,這個問題是直接投。解決:

Public Class frmBeverages 
Dim Range As Integer = 0 
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 
    While Range < 14 
     Range = Range + 1 
     Dim chk As CheckBox = 
     DirectCast(Me.Controls("Checkbox" & CStr(Range)), CheckBox) 
     If chk.CheckState = CheckState.Checked Then 
      frmLunchBoxMenu.LineNumber = frmLunchBoxMenu.LineNumber + 1 
      frmLunchBoxMenu.txtOrder.AppendText(CStr(frmLunchBoxMenu.LineNumber) & ".) An order of " & chk.Text & Environment.NewLine) 
     End If 
    End While 
    Close() 
End Sub 
End Class 
+6

這個問題似乎是題外話,因爲它是關於代碼審查。改爲嘗試http://codereview.stackexchange.com/。 – Stijn

+0

嗯,我有一個方法,但它只是沒有工作,我可以發佈,而不是如果你喜歡。 – RexPRGMER

+0

這段代碼位於哪裏,它是在事件處理程序還是子程序中? –

回答

0

這可能是一個辦法做到這一點:

Dim Range As Integer() = 
     Enumerable.Range(1, 20).ToArray 

    For Each n As Integer In Range 

     Dim chk As CheckBox = 
      DirectCast(Me.Controls("Checkbox" & CStr(n)), CheckBox) 
     ' Specify above the right ControlCollection if needed. 

     If chk.Checked Then 

      With frmLunchBoxMenu 
       .LineNumber += 1 
       .txtOrder.AppendText(CStr(frmLunchBoxMenu.LineNumber) & 
            ".) An order of " & chk.Text & 
            Environment.NewLine) 
      End With 

     End If 

    Next n 
1
Dim strOutput As String = "" 
Dim intLineNumber As Integer = 0 
For Each ctl As Control In Me.Controls 
    If TypeOf ctl Is CheckBox Then 
    Dim chk As CheckBox = DirectCast(ctl, CheckBox) 
    If chk.Checked Then 
     intLineNumber += 1 
     strOutput &= intLineNumber.ToString + ".) An order of " + ctl.Text & vbCrLf 
    End If 
    End If 
Next ctl 
txtOrder.Text = strOutput 

...但你也應該考慮使用CheckedListBox控件來代替。這將允許您的菜單被動態加載(從文本文件或數據庫加載),並且您不需要管理多個複選框控件。

這裏的CheckedListBox版本...

Public Class frmLunchBoxMenu 
    'Add a CheckedListBox, a Button, and a TextBox named txtOrder to the form 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    CheckedListBox1.Items.Clear() 
    CheckedListBox1.Items.Add("Hamburger") 
    CheckedListBox1.Items.Add("Pizza") 
    CheckedListBox1.Items.Add("Cola") 
    CheckedListBox1.Items.Add("Chips") 
    CheckedListBox1.Items.Add("Hot dog") 
    End Sub 


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim strOutput As String = "" 
    Dim intLineNumber As Integer = 0 
    For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
     If CheckedListBox1.GetItemChecked(i) Then 
     intLineNumber += 1 
     strOutput &= intLineNumber.ToString + ".) An order of " + CheckedListBox1.Items(i).ToString & vbCrLf 
     End If 
    Next i 
    txtOrder.Text = strOutput 
    End Sub 

End Class 
+0

動態加載?那是什麼? – RexPRGMER

+0

我的意思是當應用程序正在運行時,您可以從文本文件或數據庫加載菜單,因此每次菜單更改時都不需要重新編譯。 – SSS