VB.NET ..... Loop help - PullRequest
       16

VB.NET ..... Loop help

0 голосов
/ 12 декабря 2008

Я использую My.Settings в Visual Studio 2008 для хранения информации, когда пользователь снова запускает программу.

У меня это работает нормально ... но поскольку я использую 12 текстовых полей, я не хочу писать ...

my.settings.grade1 = textbox1.text

для каждого, и я также делаю вычисления, используя сохраненную информацию, поэтому я не хочу писать my.settings.grade1 + my.settings.grade2 и т. Д.

Любая помощь приветствуется

Спасибо =)

Ответы [ 5 ]

1 голос
/ 13 декабря 2008

Рассматривали ли вы использование привязки ApplicationSettings для автоматической привязки ваших значений к вашим свойствам Textboxes.Text. Это будет поддерживать двухстороннее связывание, и все, что вам нужно сделать, это сохранить вызов при закрытии.

1 голос
/ 12 декабря 2008

В вашей форме с текстовыми полями добавьте их в коллекцию или массив текстовых полей при инициализации формы.

Затем выполните итерацию по коллекции или массиву текстовых полей, чтобы присвоить значение параметра.

Если вы не хотите вручную кодировать назначение текстовых полей в массив, то в коде инициализации формы выполните итерацию по всем элементам управления в форме и проверьте тип элемента управления или спецификацию 'Tag', которую вы назначаете каждое текстовое поле, затем добавьте каждое текстовое поле в массив таким образом.

For Each c as Control in Me.Controls

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

Next c
0 голосов
/ 13 декабря 2008

Заполните список текстовых полей:

'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()
0 голосов
/ 12 декабря 2008

или вы можете сделать что-то вроде этого:

с учетом того, что ваши текстовые поля названы так: Grade1, Grade2, Grade3 и т. Д.

Вы можете сохранить оценки в массиве, а затем перебрать массив:

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

В зависимости от вашего расчета, вы также можете выполнить расчет внутри цикла.

0 голосов
/ 12 декабря 2008

Вы имеете в виду что-то вроде?

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...