С целью избежать создания дополнительных препятствий для миграции при улучшении существующей программы vb6. Есть ли способ достичь той же функциональности, что и контрольные массивы в vb6, без их использования?
Замените контрольные массивы перед переходом с vb6
Ответы (3)
В .NET у вас есть свойство тега. Вы также можете иметь один и тот же делегат для обработки событий, вызванных несколькими элементами управления. Задайте для свойства Tag нового элемента управления значение Index.
Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click,Button2.Click
Dim Btn As Button = CType(sender, Button)
Dim Index As Integer = CType(Btn.Tag, Integer)
' Do whatever you were doing in VB6 with the Index property
End Sub
Вы также должны посмотреть на классы, которые наследуются от BaseControlArray в VB6.Compatibility, что автоматизирует часть работы. Я считаю, что использование тега менее подвержено ошибкам в процессе преобразования, чем использование имени элемента управления. Однако не стоит благодарить это за абсолют. Вам нужно будет решить, какой подход лучше всего - использовать имя элемента управления или использовать тег как индекс.
В любом случае вы можете легко настроить .NET для передачи событий, вызванных несколькими элементами управления, в один обработчик.
Что ж, вы всегда можете создать свой собственный массив элементов управления в коде :) Возможно, лучший контейнер - это объект Collection или Dictionary. В зависимости от того, что вы хотите сделать, вы, возможно, могли бы создать класс-оболочку для элемента управления с помощью настраиваемого класса коллекции ... но создание объектной модели намного лучше с использованием универсальных шаблонов в .NET, поэтому, вероятно, лучше пока не усложнять его в VB6 .
В пользовательских формах VBA отсутствует поддержка массивов элементов управления, поэтому почему бы не найти в Google предложения о том, как имитировать массивы элементов управления с помощью VBA, Userforms, Excel и т. Д.
Кстати, пробовали ли вы перенести контрольные массивы с VB6 на VB.NET? Просто предположение, но, учитывая, что они обычно используются в VB, я полагаю, что они обрабатываются довольно хорошо.
Я немного почитал и поэкспериментировал за последние пару дней, и кажется, что в vb6 нет другого способа делать то, что делают контрольные массивы. Если вы уже знаете количество элементов управления, которые вы будете создавать во время выполнения, во время разработки, вы можете объявить переменные объекта частного элемента управления «с событиями» и динамически создавать их экземпляры во время выполнения. Если вам нужно создать что-то еще, вы можете это сделать, но у них не будет кода, который запускался бы в ответ на события. Насколько я понимаю, это суть проблемы. нет способа динамически связать код с событием динамически созданного элемента управления в vb6.