【问题标题】:VB.NET..... Loop helpVB.NET .....循环帮助
【发布时间】:2010-09-26 16:57:37
【问题描述】:

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

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

my.settings.grade1 = textbox1.text

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

欢迎任何帮助

谢谢 =)

【问题讨论】:

  • 请粘贴您遇到问题的具体代码。

标签: vb.net visual-studio loops


【解决方案1】:

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

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

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

For Each c as Control in Me.Controls

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

Next c

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      或者你可以这样做:

      鉴于您的文本框的命名方式如下:Grade1、Grade2、Grade3 等。

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

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

      根据你的计算,你也可以在循环内执行计算。

      【讨论】:

      • 是的,这比我的想法好(如果文本框的名称包含成绩的索引)。
      【解决方案4】:

      填充成绩文本框列表:

      '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()
      

      【讨论】:

        【解决方案5】:

        你的意思是类似的吗?

            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
        

        【讨论】:

        • 您如何知道控件与数据的顺序相同?您不想遍历表单中的每个控件,因为您可能拥有不需要分配值的控件。
        • OP 未指定详细信息。我只是想提出一种可能的方法 - 实际代码必须根据特定要求量身定制。
        • 如果里面有除成绩文本框以外的任何内容,您的索引最终会超出范围。
        猜你喜欢
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        • 2010-09-26
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多