VB.NET ..... Справка по петлям

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

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

my.settings.grade1 = textbox1.text

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

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

Спасибо =)

Вставьте конкретный код, с которым у вас возникла проблема.

George Stocker 13.12.2008 18:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
1 480
5

Ответы 5

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

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

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

For Each c as Control in Me.Controls

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

Next c

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

    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

как узнать, что элементы управления расположены в том же порядке, что и данные? Вы не хотите перебирать каждый элемент управления в форме, поскольку у вас могут быть элементы управления, которым не нужно назначать значения.

Victor 12.12.2008 22:56

В ОП не уточнили подробностей. Я просто пытался представить возможный метод - фактический код должен был адаптироваться к конкретным требованиям.

Jim Anderson 12.12.2008 23:03

Если там есть что-нибудь, кроме текстового поля оценок, ваши индексы выйдут за границы.

Joel Coehoorn 12.12.2008 23:50

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

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

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

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

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

Да, это лучше, чем моя идея (если имя текстового поля содержит индекс оценки).

Jim Anderson 12.12.2008 23:19

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

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

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

Другие вопросы по теме