0

我在 Visual Studio 2008 中使用 My.Settings 来存储信息,以供用户再次运行程序时使用。

我的工作正常...但是由于我使用 12 个文本框,我不想写...

我的.settings.grade1 = textbox1.text

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

欢迎任何帮助

谢谢 =)

4

5 回答 5

1

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

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

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

For Each c as Control in Me.Controls

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

Next c
于 2008-12-12T19:49:09.637 回答
1

您是否考虑过使用 ApplicationSettings Binding 将您的值自动绑定到您的 Textboxes.Text 属性。这将支持 2 向绑定,然后您所要做的就是在关闭时调用 Save。

于 2008-12-12T21:18:20.283 回答
0

或者你可以这样做:

假设您的文本框按照以下方式命名:Grade1、Grade2、Grade3 等。

您可以将成绩存储在一个数组中,然后遍历该数组:

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

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

于 2008-12-12T19:55:34.383 回答
0

填充成绩文本框列表:

'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

保存成绩:

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()
于 2008-12-12T21:12:03.743 回答
-1

你的意思是类似的吗?

    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
于 2008-12-12T19:54:32.713 回答