我在visual studio 2008中使用My.Settings来存储信息,以便用户再次运行程序。
我的工作正常......但是当我使用12个文本框时,我不想写...
my.settings.grade1 = textbox1.text
对于每一个,我也使用存储的信息进行计算,所以我不想写my.settings.grade1 + my.settings.grade2等..
欢迎任何帮助
谢谢=)
答案 0 :(得分:1)
在包含文本框的表单上,在初始化表单时将它们添加到集合或文本框数组中。
然后,遍历文本框的集合或数组以分配设置值。
如果您不想手动将文本框的分配编码到数组中,那么在表单初始化代码中,遍历表单上的所有控件并检查控件类型或指定的specfici“Tag”每个文本框,然后将每个文本框添加到数组中。
For Each c as Control in Me.Controls
If c.Tag.ToString() = "Grade" Then
' Add Items to collection here '
End If
Next c
答案 1 :(得分:1)
您是否考虑过使用ApplicationSettings Binding将值自动绑定到Textboxes.Text属性。这将支持双向绑定,然后您只需在关闭时调用Save。
答案 2 :(得分:0)
或者你可以这样做:
鉴于您的文本框的命名方式为:Grade1,Grade2,Grade3等。
你可以将Grades存储在一个数组中,然后循环遍历数组:
((TextBox)form.findControl("Grade" + i.ToString())).Text = Grade(i)
根据您的计算,您还可以在循环内执行计算。
答案 3 :(得分: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()
答案 4 :(得分:-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