2008-12-12 3 views
0

Я использую My.Settings в visual studio 2008 для хранения информации, когда пользователь снова запускает программу.VB.NET ..... Loop help

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

my.settings.grade1 = TextBox1.Text

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

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

Спасибо =)

+0

Пожалуйста, вставьте конкретный код, с которым вы столкнулись. – 2008-12-13 15:22:58

ответ

1

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

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

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

For Each c as Control in Me.Controls 

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

Next c 
-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 
+0

Как вы знаете, что элементы управления находятся в том же порядке, что и данные? Вы не хотите проходить через каждый элемент управления в форме, поскольку у вас могут быть элементы управления, которым не нужно назначать значения. – Victor 2008-12-12 19:56:38

+0

ОП не указывал детали. Я просто пытался представить возможный метод - фактический код должен был бы соответствовать конкретным требованиям. – 2008-12-12 20:03:46

0

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

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

можно хранить Сорта в массиве и затем петля через массив:

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

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

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

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