VB.NET。。。。。循环帮助

VB.NET。。。。。循环帮助,vb.net,visual-studio,loops,Vb.net,Visual Studio,Loops,我正在使用visual studio 2008中的.Settings存储信息,以备用户再次运行程序时使用 我的工作很好。。。但由于我使用12个文本框,我不想写 my.settings.grade1=textbox1.text 对于每一个,我也使用存储的信息进行计算,所以我不想写my.settings.grade1+my.settings.grade2等等 欢迎任何帮助 谢谢=)在具有文本框的表单上,在初始化表单时将它们添加到文本框集合或数组中 然后,遍历文本框的集合或数组以分配给设置值 如果您不

我正在使用visual studio 2008中的.Settings存储信息,以备用户再次运行程序时使用

我的工作很好。。。但由于我使用12个文本框,我不想写

my.settings.grade1=textbox1.text

对于每一个,我也使用存储的信息进行计算,所以我不想写my.settings.grade1+my.settings.grade2等等

欢迎任何帮助


谢谢=)

在具有文本框的表单上,在初始化表单时将它们添加到文本框集合或数组中

然后,遍历文本框的集合或数组以分配给设置值

如果您不想手动将文本框的分配编码到数组中,那么在表单初始化代码中,迭代表单上的所有控件,检查分配给每个文本框的控件类型或特定的“标记”,然后以这种方式将每个文本框添加到数组中

For Each c as Control in Me.Controls

 If c.Tag.ToString() = "Grade" Then
  ' Add Items to collection here '
 End If

Next c

你是说类似的东西吗

    Dim sum As Long
    Dim grades(11) As Long

    Dim i As Integer = 0
    For Each ctr In Controls
        If TypeOf (ctr) Is TextBox Then
            grades(i) = CLng(ctr.Text)
            sum = sum + grades(i)
            i = i + 1
        End If
    Next

或者你可以这样做:

考虑到这些因素,您的文本框按以下顺序命名:1年级、2年级、3年级等

您可以将等级存储在数组中,然后在数组中循环:

((TextBox)form.findControl("Grade" + i.ToString())).Text = Grade(i)

根据您的计算,您还可以在循环内执行计算。

填充等级文本框列表:

'at the class level'
Public GradeBoxes(11) As TextBox
Const grade As String = "GRADE"

'when the form is created'
Dim i As Integer = 0
For Each ctr As Control In Controls
    If TypeOf (ctr) Is TextBox AndAlso ctr.Name.ToUpper.StartsWith(grade) Then
        i = CInt(ctr.Name.SubString(grade.Length))
        If i >= 0 AndAlso i < GradeBoxes.Length Then GradeBoxes(i) = ctrl
    End If
Next ctr

For Each box As TextBox in GradeBoxes
    If box IsNot Nothing AndAlso My.Settings(box.Name) IsNot Nothing Then
        box.Text = My.Settings(box.Name)
    End If
Next box

您是否考虑过使用ApplicationSettings绑定将您的值自动绑定到文本框。文本属性。这将支持双向绑定,然后关闭时只需调用Save即可。

如何知道控件与数据的顺序相同?您不想循环表单中的每个控件,因为您可能有不需要赋值的控件。OP没有指定详细信息。我只是想提出一种可能的方法——实际的代码必须根据具体的要求进行定制。如果其中没有分数文本框,那么你的索引将超出范围。是的,这比我的想法要好(如果文本框的名称包含分数的索引)。请粘贴您遇到问题的特定代码。
For Each box As TextBox in GradeBoxes
    If box IsNot Nothing AndAlso My.Settings(box.Name) IsNot Nothing Then
        My.Settings(box.Name) = box.Text
    End If
Next box
My.Settings.Save()