Visual Basic 2010 Создание массива элементов управления

Как я могу сделать массив управления? Или эквивалент

Я привык к Visual Basic 6, который предоставляет возможность создавать массив элементов управления при копировании, вставке и управлении.

 MikeG25 сент. 2010 г., 23:22
Я не могу вспомнить, являются ли массивы элементов управления таким образом, чтобы вы могли динамически добавлять новые элементы управления в форму? Это то, что вы пытаетесь достичь?

Ответы на вопрос(5)

Решение Вопроса

рь закон земли для В.Б.

Вам нужно использовать какую-то коллекцию, такую ​​каксписок.

Вы можете действовать только через код. Например:

Dim c() As TextBox
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim j As Integer
    For j = 0 To 10
        ReDim Preserve c(j)
        c(j) = New TextBox
        c(j).Name = "txt" & j
        c(j).Parent = Me
        c(j).Top = j * c(j).PreferredHeight + 2
        c(j).Tag = j
        c(j).Visible = True
        AddHandler c(j).KeyPress, AddressOf TestKeyPress
    Next
End Sub

Public Sub TestKeyPress(source As Object, e As KeyPressEventArgs)
    Dim index As Integer
    index = CInt(source.tag)
    If index >= 5 Then
        If e.KeyChar > "9" Or e.KeyChar < "0" Then
            e.Handled = True
        End If
    Else
        If e.KeyChar <= "9" And e.KeyChar >= "0" Then
            e.Handled = True
        End If
    End If
End Sub

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

Свойство TAG используется для хранения и извлечения idex текстового поля.

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

Вы делаете это в VB.NET, помещая элементы управления вHandles пункт:

private sub Button_Click(...) Handles Command1.Click, Command2.Click, Command3.Click

end sub
 Kaniu28 сент. 2010 г., 21:13
Не только Они также позволили вам поместить более 256 элементов управления в одну форму.
 GSerg28 сент. 2010 г., 21:19
@ Kaniu Не обязательно. Вы могли бы использоватьControls.Add сделать то же самое без создания массива управления.
 Kaniu29 сент. 2010 г., 21:15
Только если вы хотите (и можете) добавить элементы управления во время выполнения. Но если есть, например, десяток вкладок, заполненных элементами управления, это не может быть вариантом.

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

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

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

Обработчики событий .NET довольно разные. Обычно вы получаете ссылку на конкретный экземпляр элемента управления и экземпляр конкретного объекта события с атрибутами события, которое нужно обработать. Вы НЕ получите индекс.

Кроме того, приложения VB6 иногда имеют логику, которая повторяет / манипулирует массивом управления как массивом.

В наших переводах по умолчанию мы стараемся поддерживать устаревшую логику VB6, которая явно зависит от массива управления и его индексов. Мы переписываем массивы элементов управления как группу отдельных экземпляров элементов управления, а затем добавляем их в общий OrderDictionary <int, controlType> во время инициализации формы. Отдельные элементы управления подписываются на события, и мы можем использовать коллекцию для поиска индекса по заданному экземпляру элемента управления или для итерации / манипулирования элементами в «массиве». Если вам явно не нужен индекс или массив, вы можете избавиться от коллекции.

Динамическое добавление элементов управления теперь больше работает - это было концептуально похоже на добавление элемента в массив элементов управления и поддерживается одним оператором в VB6 (управление загрузкой). Насколько я знаю, в .NET нужно клонировать элемент управления, явно копировать свойства и явно подключать обработчики событий. Он может быть обобщен с использованием отражения и других умеренно продвинутых методов, но это не просто вызов «управления нагрузкой». Если есть более простой способ сделать это в .NET, я хотел бы услышать об этом. FWIW: мы переводим на вспомогательную функцию.

Ваш ответ на вопрос