использование набора комбинированных списков для изменения свойства Enabled - PullRequest
0 голосов
/ 09 июля 2020

Я создаю большую форму ввода данных и хочу включить или отключить группы полей со списком на основе флажка (если флажок установлен, набор полей со списком будет включен для ввода пользователем и наоборот). Я хочу использовать коллекцию, потому что поля со списком не всегда будут располагаться в последовательном порядке (пример: поля со списком 1-7, затем поле со списком 12, затем 16 и 45-57). Коллекция кажется идеальной.

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

Я могу заставить это работать, если я выберу все поля со списком в моей форме, а затем запустить сквозной список, сопоставляя имена с переменной (например, для полей 1–56), но это делает использование коллекции излишним. Я также собираюсь вывести данные в группах сбора для дальнейшего использования.

Я бился головой о стену в течение дня или около того ..

Объявить коллекцию

 Dim CablesCollectionBoxes As New Collection

Добавить поля со списком в коллекцию

CablesCollectionBoxes.Add(ComboBox1)
 CablesCollectionBoxes.Add(ComboBox2)
 CablesCollectionBoxes.Add(ComboBox3)
 .
 <removed for space and readability>
 .
 CablesCollectionBoxes.Add(ComboBox56)
 

Я пытаюсь изменить коллекцию элементов со списком до отключенного состояния, но приведенный ниже код не работает.

for I as integer = 1 to 56
   CablesCollectionBoxes.Item(i) = Disabled 
 next

Он ДЕЙСТВИТЕЛЬНО работает, если я использую это, но я не использую коллекцию, я использую ВСЕ поля со списком и совпадающие имена:

For i As Integer = 1 To 56
    Dim clsCombo As ComboBox = DirectCast(Me.Controls.Find("ComboBox" & i.ToString(), True)(0), ComboBox)
    clsCombo.Enabled = True
Next

или это

    ComboBox1.Enabled = True
    ComboBox2.Enabled = True
    ComboBox3.Enabled = True
    ComboBox4.Enabled = True
     .
    <removed for space and readability>
     .
    ComboBox56.Enabled = True

Как мне получить доступ к комбинированным спискам как к группе и изменить свойства? Я неправильно объявил коллекцию?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Не использовать сбор. Коллекции не рекомендуются. Use List(Of T)

Dim comboList As New List(Of ComboBox)()
comboList.Add(cbo1)
comboList.Add(cbo2)
comboList.Add(cbo3)


' Imports System.Linq
comboList.ForEach(Sub(cbo) cbo.Enabled = True)

Это как можно ближе к вам.

Теперь, если вы хотите иметь какой-то выборочный способ включения / отключения или чего-то еще, вы можете использовать Tag пометить свойство, и тогда оно будет выглядеть так

comboList.Where(Function(cbo) cbo.Tag IsNot Nothing AndAlso CBool(cbo.Tag)).ToList().ForEach(Sub(cbo) cbo.Enabled = True)
0 голосов
/ 09 июля 2020

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

Private ComboCollection As New List(Of ComboBox)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    BuildCBCollection()
End Sub

Private Sub BuildCBCollection()
    For Each ctrl As Control In Me.Controls
        If TypeOf (ctrl) Is ComboBox Then
            ComboCollection.Add(CType(ctrl, ComboBox))
        End If
    Next
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    For Each cb In ComboCollection
        cb.Enabled = Not cb.Enabled
    Next
End Sub
...