我在 Visual Studio 2008 中使用 My.Settings 来存储信息,以供用户再次运行程序时使用。
我的工作正常...但是由于我使用 12 个文本框,我不想写...
我的.settings.grade1 = textbox1.text
对于每一个,我也在使用存储的信息进行计算,所以我不想写 my.settings.grade1 + my.settings.grade2 等。
欢迎任何帮助
谢谢 =)
我在 Visual Studio 2008 中使用 My.Settings 来存储信息,以供用户再次运行程序时使用。
我的工作正常...但是由于我使用 12 个文本框,我不想写...
我的.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
您是否考虑过使用 ApplicationSettings Binding 将您的值自动绑定到您的 Textboxes.Text 属性。这将支持 2 向绑定,然后您所要做的就是在关闭时调用 Save。
或者你可以这样做:
假设您的文本框按照以下方式命名:Grade1、Grade2、Grade3 等。
您可以将成绩存储在一个数组中,然后遍历该数组:
((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
保存成绩:
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()
你的意思是类似的吗?
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