2014-03-18 32 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