繁体   English   中英

VB.NET…循环帮助

[英]VB.NET… Loop help

我在Visual Studio 2008中使用My.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

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

或者您可以执行以下操作:

给定您的文本框的名称,请按以下方式命名: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM