Заполнить логический массив из контрольного массива флажков - PullRequest
0 голосов
/ 08 апреля 2020

Моя программа создает массив флажков во время выполнения, как показано ниже:

For Looper = 0 To 36
  Dim Ex1ConfigCheck As New CheckBox                    
  frmSetup.Controls.Add(Ex1ConfigCheck)                ' Add Control to from
  Ex1ConfigCheck.Top = (Looper + 45) + (Looper * 18)   ' Set Location
  Ex1ConfigCheck.Left = 210
  Ex1ConfigCheck.Text = Setup.ExCheckName(Looper)      ' Set Text property from strArray
Next

Здесь я не знаю, как поступить.

Я хотел бы заполнить логическое значение массив (например, MyBoolean (37)) со значением Ex1configCheck (). Проверено. Причина, по которой я хотел бы заполнить другой массив, заключается в том, что мне нужно иметь возможность ссылаться на значения флажков в других частях кода, но не могу получить к ним доступ, пока они не будут созданы. Кроме того, я планирую сохранить массив в двоичный файл.

Может кто-нибудь указать мне правильное направление, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

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

Я нашел альтернативный способ выполнения своей задачи. Вместо создания 8 «массивов» флажков, я узнал об очень простом доступном элементе управления, называемом «CheckedListBox».

Мне действительно не нужно было создавать флажки во время выполнения, но я пытался найти более простой способ создания 8 групп из 37 флажков без необходимости вручную присваивать имена и задавать свойства каждой из них во время разработки. Я также хотел иметь возможность индексировать их в своем коде, чтобы иметь возможность обновлять и читать значение с помощью простых циклов. Я мог бы сделать это, создавая массивы CheckBox, но опять же, мне пришлось бы вручную инициализировать массивы.

Как только я нашел CheckedListBox, я смог выполнить sh то, что я хочу очень быстро. Мне нужно было только установить свойства 8 «групп» (CheckedListBox's) и заполнить их, используя свойство items. По сути, ListBox создал список, подобный предложенному Jimi автоматически, и я могу индексировать каждый список с помощью al oop по желанию. Предложение Джими фактически привело меня к поиску CheckedListBox, в то время как я искал больше информации об использовании «List (of CheckBox)».

Иногда общение с другими помогает мне найти правильные вопросы. Google смог выяснить, что я хотел, когда я искал "Список (из CheckBox)". (

0 голосов
/ 09 апреля 2020

Если в этом же контейнере нет других CheckBoxes, то вы можете сделать следующее:

Dim flags = Me.Controls.OfType(Of CheckBox)().
                        Select(Function(cb) cb.Checked).
                        ToArray()

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

Как предложено @Jimi, вы также можете создать List(Of CheckBox) и присвоить его полю, заполняя его при создании элементов управления. Затем вы можете использовать этот список вместо создания по требованию:

Dim flags = myCheckBoxList.Select(Function(cb) cb.Checked).
                           ToArray()

Конечно, если вы точно знаете, сколько CheckBoxes вы собираетесь добавить, зачем вам ждать до времени выполнения создать их? Почему вы не можете создать их во время разработки, а затем изменить их во время выполнения? Обычно вы создаете элементы управления только во время выполнения, если вы не знаете, сколько их будет до времени выполнения, но здесь это не так.

...